@fluid-app/portal-sdk 0.1.311 → 0.1.313

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.
Files changed (172) hide show
  1. package/dist/{AddressAutocompleteInput-CmbuVfD5.cjs → AddressAutocompleteInput-BqZwiUup.cjs} +212 -136
  2. package/dist/AddressAutocompleteInput-BqZwiUup.cjs.map +1 -0
  3. package/dist/{AddressAutocompleteInput-RLaGWKfq.mjs → AddressAutocompleteInput-DY0ZFQOs.mjs} +212 -136
  4. package/dist/AddressAutocompleteInput-DY0ZFQOs.mjs.map +1 -0
  5. package/dist/{ContactsScreen-C2-ScK3i.cjs → ContactsScreen-B_iTSV67.cjs} +21 -21
  6. package/dist/{ContactsScreen-C2-ScK3i.cjs.map → ContactsScreen-B_iTSV67.cjs.map} +1 -1
  7. package/dist/{ContactsScreen-9613La-4.cjs → ContactsScreen-BacGvYpU.cjs} +1 -1
  8. package/dist/{ContactsScreen-CAwUXMDr.mjs → ContactsScreen-D2htG3gL.mjs} +21 -21
  9. package/dist/{ContactsScreen-CAwUXMDr.mjs.map → ContactsScreen-D2htG3gL.mjs.map} +1 -1
  10. package/dist/{FluidProvider-D4T1Tfn7.mjs → FluidProvider-BdjVFM6g.mjs} +5 -3
  11. package/dist/{FluidProvider-D4T1Tfn7.mjs.map → FluidProvider-BdjVFM6g.mjs.map} +1 -1
  12. package/dist/{FluidProvider-FvdFx8ML.cjs → FluidProvider-CiMgrTE0.cjs} +5 -3
  13. package/dist/{FluidProvider-FvdFx8ML.cjs.map → FluidProvider-CiMgrTE0.cjs.map} +1 -1
  14. package/dist/{MessagingScreen-_TJsaL8I.cjs → MessagingScreen-B0nvkVRJ.cjs} +2 -2
  15. package/dist/{MessagingScreen-_TJsaL8I.cjs.map → MessagingScreen-B0nvkVRJ.cjs.map} +1 -1
  16. package/dist/{MessagingScreen-CWqnuXcd.mjs → MessagingScreen-ClnTfJPR.mjs} +2 -2
  17. package/dist/{MessagingScreen-CWqnuXcd.mjs.map → MessagingScreen-ClnTfJPR.mjs.map} +1 -1
  18. package/dist/{MessagingScreen-bUf-46H5.cjs → MessagingScreen-DckwoF5C.cjs} +2 -2
  19. package/dist/{MessagingScreen-DuYCzPYW.mjs → MessagingScreen-Dz57LSh8.mjs} +2 -2
  20. package/dist/{OrdersScreen-kVm3EyXs.cjs → OrdersScreen-Ci3ZZZKP.cjs} +2 -2
  21. package/dist/{OrdersScreen-kVm3EyXs.cjs.map → OrdersScreen-Ci3ZZZKP.cjs.map} +1 -1
  22. package/dist/{OrdersScreen-CGxEuDzh.cjs → OrdersScreen-CtzoJUXX.cjs} +2 -2
  23. package/dist/{OrdersScreen-D1Whz24J.mjs → OrdersScreen-DKzZQPWm.mjs} +2 -2
  24. package/dist/{OrdersScreen-OEk3M3Qm.mjs → OrdersScreen-zpW6p4eP.mjs} +2 -2
  25. package/dist/{OrdersScreen-OEk3M3Qm.mjs.map → OrdersScreen-zpW6p4eP.mjs.map} +1 -1
  26. package/dist/{ProfileScreen-DCrPvVaF.cjs → ProfileScreen-BRYNGS4S.cjs} +3 -3
  27. package/dist/{ProfileScreen-BBjsjvuj.cjs → ProfileScreen-BXZMqNcY.cjs} +30 -23
  28. package/dist/ProfileScreen-BXZMqNcY.cjs.map +1 -0
  29. package/dist/{ProfileScreen-eeXNttNa.mjs → ProfileScreen-BirNjDNw.mjs} +3 -3
  30. package/dist/{ProfileScreen-DeTQ4Xoo.mjs → ProfileScreen-D-Vo-_yC.mjs} +30 -23
  31. package/dist/ProfileScreen-D-Vo-_yC.mjs.map +1 -0
  32. package/dist/{ShopScreen-BGiVyKAO.cjs → ShopScreen-CBZsxycw.cjs} +2 -2
  33. package/dist/{ShopScreen-KF3dsnFC.mjs → ShopScreen-CC3KbNCc.mjs} +2 -2
  34. package/dist/{ShopScreen-KF3dsnFC.mjs.map → ShopScreen-CC3KbNCc.mjs.map} +1 -1
  35. package/dist/{ShopScreen-Cx-iyP99.cjs → ShopScreen-D9I_t5HX.cjs} +2 -2
  36. package/dist/{ShopScreen-Cx-iyP99.cjs.map → ShopScreen-D9I_t5HX.cjs.map} +1 -1
  37. package/dist/{ShopScreen-CH3PhvzA.mjs → ShopScreen-Jsj-2scF.mjs} +2 -2
  38. package/dist/{SubscriptionsScreen-BJ8yW6x3.cjs → SubscriptionsScreen-Bo4cTf0n.cjs} +3 -3
  39. package/dist/{SubscriptionsScreen-7DGtY49t.cjs → SubscriptionsScreen-CNjeVllB.cjs} +152 -57
  40. package/dist/SubscriptionsScreen-CNjeVllB.cjs.map +1 -0
  41. package/dist/{SubscriptionsScreen-DpcL08EP.mjs → SubscriptionsScreen-DcmKn9y1.mjs} +152 -57
  42. package/dist/SubscriptionsScreen-DcmKn9y1.mjs.map +1 -0
  43. package/dist/{SubscriptionsScreen-CHdYF4Ga.mjs → SubscriptionsScreen-s9CNAkH9.mjs} +3 -3
  44. package/dist/{de-5dJcGXHd.mjs → de-CZcaM1mg.mjs} +33 -1
  45. package/dist/de-CZcaM1mg.mjs.map +1 -0
  46. package/dist/{de-279qQKkW.cjs → de-DOhr1RUy.cjs} +33 -1
  47. package/dist/de-DOhr1RUy.cjs.map +1 -0
  48. package/dist/{el-DXt-pZcE.mjs → el-CFfcOTW0.mjs} +33 -1
  49. package/dist/el-CFfcOTW0.mjs.map +1 -0
  50. package/dist/{el-CFPYRWKm.cjs → el-De6RiFnZ.cjs} +33 -1
  51. package/dist/el-De6RiFnZ.cjs.map +1 -0
  52. package/dist/{es-DLfWfxCc.cjs → es-BxpjC2GW.cjs} +33 -1
  53. package/dist/es-BxpjC2GW.cjs.map +1 -0
  54. package/dist/{es-WB2frRI4.mjs → es-jVAovyyN.mjs} +33 -1
  55. package/dist/es-jVAovyyN.mjs.map +1 -0
  56. package/dist/{fr-DgmvSclY.mjs → fr-BS-JXutt.mjs} +33 -1
  57. package/dist/fr-BS-JXutt.mjs.map +1 -0
  58. package/dist/{fr-C3IQZmS6.cjs → fr-DErR5mVD.cjs} +33 -1
  59. package/dist/fr-DErR5mVD.cjs.map +1 -0
  60. package/dist/{he-XJMTsvul.cjs → he-BCoena1G.cjs} +33 -1
  61. package/dist/he-BCoena1G.cjs.map +1 -0
  62. package/dist/{he-w6k-YiLm.mjs → he-Dm3gcP5z.mjs} +33 -1
  63. package/dist/he-Dm3gcP5z.mjs.map +1 -0
  64. package/dist/{hu-BydB22cZ.cjs → hu-BzV6oL5x.cjs} +33 -1
  65. package/dist/hu-BzV6oL5x.cjs.map +1 -0
  66. package/dist/{hu-tDjFfQ9J.mjs → hu-DrbPFf-v.mjs} +33 -1
  67. package/dist/hu-DrbPFf-v.mjs.map +1 -0
  68. package/dist/{id-Dp68FLAc.mjs → id-B8lS0RIT.mjs} +33 -1
  69. package/dist/id-B8lS0RIT.mjs.map +1 -0
  70. package/dist/{id-0CifOwIm.cjs → id-BJnQbLNZ.cjs} +33 -1
  71. package/dist/id-BJnQbLNZ.cjs.map +1 -0
  72. package/dist/index.cjs +20 -20
  73. package/dist/index.mjs +20 -20
  74. package/dist/{it-DngfQciz.mjs → it-Cz92WfRO.mjs} +33 -1
  75. package/dist/it-Cz92WfRO.mjs.map +1 -0
  76. package/dist/{it-CBdazuIz.cjs → it-Dij-dYqs.cjs} +33 -1
  77. package/dist/it-Dij-dYqs.cjs.map +1 -0
  78. package/dist/{ja-CVtC1kDv.cjs → ja-CrT0URkz.cjs} +33 -1
  79. package/dist/ja-CrT0URkz.cjs.map +1 -0
  80. package/dist/{ja-CkMDVPtH.mjs → ja-DI_TV2Zj.mjs} +33 -1
  81. package/dist/ja-DI_TV2Zj.mjs.map +1 -0
  82. package/dist/{ko-R-Le9JU8.cjs → ko-Dv4sXcM3.cjs} +33 -1
  83. package/dist/ko-Dv4sXcM3.cjs.map +1 -0
  84. package/dist/{ko-B72HbkvY.mjs → ko-E9TdOA9L.mjs} +33 -1
  85. package/dist/ko-E9TdOA9L.mjs.map +1 -0
  86. package/dist/{nl-CuaJpFBW.mjs → nl-B_w0JfzN.mjs} +33 -1
  87. package/dist/nl-B_w0JfzN.mjs.map +1 -0
  88. package/dist/{nl-dE66DT9d.cjs → nl-CPxJexkh.cjs} +33 -1
  89. package/dist/nl-CPxJexkh.cjs.map +1 -0
  90. package/dist/{pl-CNTDY6Ov.mjs → pl-BTmWl6HG.mjs} +33 -1
  91. package/dist/pl-BTmWl6HG.mjs.map +1 -0
  92. package/dist/{pl-d7LeUSmm.cjs → pl-ifHwr3rd.cjs} +33 -1
  93. package/dist/pl-ifHwr3rd.cjs.map +1 -0
  94. package/dist/{pt-Cu2TCvrS.mjs → pt-C1UtoI8g.mjs} +33 -1
  95. package/dist/pt-C1UtoI8g.mjs.map +1 -0
  96. package/dist/{pt-DlWYOQB7.cjs → pt-lMkT_wS4.cjs} +33 -1
  97. package/dist/pt-lMkT_wS4.cjs.map +1 -0
  98. package/dist/{ro-IGnNpnPk.mjs → ro-CQ1vwLZl.mjs} +33 -1
  99. package/dist/ro-CQ1vwLZl.mjs.map +1 -0
  100. package/dist/{ro-CxRERiJd.cjs → ro-DDUpw1f5.cjs} +33 -1
  101. package/dist/ro-DDUpw1f5.cjs.map +1 -0
  102. package/dist/{ru-BaL7GN_2.cjs → ru-BQOLcWNV.cjs} +33 -1
  103. package/dist/ru-BQOLcWNV.cjs.map +1 -0
  104. package/dist/{ru-CDda1N4V.mjs → ru-V4rwK1qm.mjs} +33 -1
  105. package/dist/ru-V4rwK1qm.mjs.map +1 -0
  106. package/dist/{th-Bmg6T2oO.mjs → th-BBDWFncd.mjs} +33 -1
  107. package/dist/th-BBDWFncd.mjs.map +1 -0
  108. package/dist/{th-eBfuOCvu.cjs → th-BCAGq41B.cjs} +33 -1
  109. package/dist/th-BCAGq41B.cjs.map +1 -0
  110. package/dist/{tl-yM51nib5.mjs → tl-CKtTJyIH.mjs} +33 -1
  111. package/dist/tl-CKtTJyIH.mjs.map +1 -0
  112. package/dist/{tl-DorumJMB.cjs → tl-D-jPdAL3.cjs} +33 -1
  113. package/dist/tl-D-jPdAL3.cjs.map +1 -0
  114. package/dist/{tr-q4NrT_MG.mjs → tr-C1fcNn_N.mjs} +33 -1
  115. package/dist/tr-C1fcNn_N.mjs.map +1 -0
  116. package/dist/{tr-CPLe40Ae.cjs → tr-DylwTPzx.cjs} +33 -1
  117. package/dist/tr-DylwTPzx.cjs.map +1 -0
  118. package/dist/{zh_CN-DELFfbhB.mjs → zh_CN-Ctx0sPwT.mjs} +33 -1
  119. package/dist/zh_CN-Ctx0sPwT.mjs.map +1 -0
  120. package/dist/{zh_CN-Bvmrqi_G.cjs → zh_CN-DhRV2h7N.cjs} +33 -1
  121. package/dist/zh_CN-DhRV2h7N.cjs.map +1 -0
  122. package/dist/{zh_TW-CryKLufw.mjs → zh_TW-Buj0u5-2.mjs} +33 -1
  123. package/dist/zh_TW-Buj0u5-2.mjs.map +1 -0
  124. package/dist/{zh_TW-DVfX_7Is.cjs → zh_TW-N9P2PjhJ.cjs} +33 -1
  125. package/dist/zh_TW-N9P2PjhJ.cjs.map +1 -0
  126. package/package.json +14 -14
  127. package/dist/AddressAutocompleteInput-CmbuVfD5.cjs.map +0 -1
  128. package/dist/AddressAutocompleteInput-RLaGWKfq.mjs.map +0 -1
  129. package/dist/ProfileScreen-BBjsjvuj.cjs.map +0 -1
  130. package/dist/ProfileScreen-DeTQ4Xoo.mjs.map +0 -1
  131. package/dist/SubscriptionsScreen-7DGtY49t.cjs.map +0 -1
  132. package/dist/SubscriptionsScreen-DpcL08EP.mjs.map +0 -1
  133. package/dist/de-279qQKkW.cjs.map +0 -1
  134. package/dist/de-5dJcGXHd.mjs.map +0 -1
  135. package/dist/el-CFPYRWKm.cjs.map +0 -1
  136. package/dist/el-DXt-pZcE.mjs.map +0 -1
  137. package/dist/es-DLfWfxCc.cjs.map +0 -1
  138. package/dist/es-WB2frRI4.mjs.map +0 -1
  139. package/dist/fr-C3IQZmS6.cjs.map +0 -1
  140. package/dist/fr-DgmvSclY.mjs.map +0 -1
  141. package/dist/he-XJMTsvul.cjs.map +0 -1
  142. package/dist/he-w6k-YiLm.mjs.map +0 -1
  143. package/dist/hu-BydB22cZ.cjs.map +0 -1
  144. package/dist/hu-tDjFfQ9J.mjs.map +0 -1
  145. package/dist/id-0CifOwIm.cjs.map +0 -1
  146. package/dist/id-Dp68FLAc.mjs.map +0 -1
  147. package/dist/it-CBdazuIz.cjs.map +0 -1
  148. package/dist/it-DngfQciz.mjs.map +0 -1
  149. package/dist/ja-CVtC1kDv.cjs.map +0 -1
  150. package/dist/ja-CkMDVPtH.mjs.map +0 -1
  151. package/dist/ko-B72HbkvY.mjs.map +0 -1
  152. package/dist/ko-R-Le9JU8.cjs.map +0 -1
  153. package/dist/nl-CuaJpFBW.mjs.map +0 -1
  154. package/dist/nl-dE66DT9d.cjs.map +0 -1
  155. package/dist/pl-CNTDY6Ov.mjs.map +0 -1
  156. package/dist/pl-d7LeUSmm.cjs.map +0 -1
  157. package/dist/pt-Cu2TCvrS.mjs.map +0 -1
  158. package/dist/pt-DlWYOQB7.cjs.map +0 -1
  159. package/dist/ro-CxRERiJd.cjs.map +0 -1
  160. package/dist/ro-IGnNpnPk.mjs.map +0 -1
  161. package/dist/ru-BaL7GN_2.cjs.map +0 -1
  162. package/dist/ru-CDda1N4V.mjs.map +0 -1
  163. package/dist/th-Bmg6T2oO.mjs.map +0 -1
  164. package/dist/th-eBfuOCvu.cjs.map +0 -1
  165. package/dist/tl-DorumJMB.cjs.map +0 -1
  166. package/dist/tl-yM51nib5.mjs.map +0 -1
  167. package/dist/tr-CPLe40Ae.cjs.map +0 -1
  168. package/dist/tr-q4NrT_MG.mjs.map +0 -1
  169. package/dist/zh_CN-Bvmrqi_G.cjs.map +0 -1
  170. package/dist/zh_CN-DELFfbhB.mjs.map +0 -1
  171. package/dist/zh_TW-CryKLufw.mjs.map +0 -1
  172. package/dist/zh_TW-DVfX_7Is.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { R as useAddressAutocompleteApi } from "./FluidProvider-D4T1Tfn7.mjs";
1
+ import { R as useAddressAutocompleteApi } from "./FluidProvider-BdjVFM6g.mjs";
2
2
  import { n as useActiveLocale } from "./locale-context-DGCebJhw.mjs";
3
3
  import { B as DropdownMenuContent, C as SelectContent, Cn as cn, E as SelectValue, G as DropdownMenuSeparator, Q as DialogContent, R as Label, S as Select, Sn as useZodForm, T as SelectTrigger, V as DropdownMenuItem, X as Dialog, Y as DropdownMenuTrigger, Z as DialogClose, a as Textarea, et as DialogFooter, it as DialogTitle, k as Input, tt as DialogHeader, vn as Button, w as SelectItem, z as DropdownMenu } from "./src-CKQLslxB.mjs";
4
4
  import { t as createTranslationContext } from "./translation-api-context-factory-BYNOdpnp.mjs";
@@ -75,6 +75,9 @@ const profileDomain = createDomainTranslations({
75
75
  postal_code: "Postal Code",
76
76
  select_state: "Select state",
77
77
  set_as_default_payment_method: "Set as default payment method",
78
+ same_as_shipping: "Same as shipping address",
79
+ use_a_different_address: "Use a different address",
80
+ add_billing_address: "Add billing address",
78
81
  cancel: "Cancel",
79
82
  save: "Save",
80
83
  close: "Close",
@@ -1751,14 +1754,9 @@ function useVgsCollect() {
1751
1754
  }
1752
1755
  //#endregion
1753
1756
  //#region ../../fluid-pay/ui/src/components/CreditCardFormDialog.tsx
1754
- const billingAddressSchema = z.object({
1755
- name: z.string().min(1, "Name is required"),
1756
- address1: z.string().min(1, "Address line 1 is required"),
1757
- address2: z.string().optional().nullable(),
1758
- city: z.string().min(1, "City is required"),
1759
- state: z.string().min(1, "State is required"),
1760
- zip: z.string().min(1, "Zip code is required"),
1761
- country_code: z.string().min(1, "Country is required"),
1757
+ const SENTINEL_CREATE_NEW = "__create_new__";
1758
+ const formSchema = z.object({
1759
+ billing_address_selection: z.string().refine((value) => value !== "" && value !== SENTINEL_CREATE_NEW, { message: "Please select a billing address" }),
1762
1760
  set_as_default: z.boolean()
1763
1761
  });
1764
1762
  function VgsInputWrapper({ id, label, fieldState, className }) {
@@ -1812,68 +1810,140 @@ function VgsCardForm({ vgsFieldState, networkError }) {
1812
1810
  ]
1813
1811
  });
1814
1812
  }
1815
- function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countries = [], error, jwt, renderAddressAutocomplete, t }) {
1813
+ function formatAddressOneLine(addr) {
1814
+ const cityStateZip = [
1815
+ addr.city,
1816
+ addr.state,
1817
+ addr.postal_code
1818
+ ].filter((p) => Boolean(p && p.trim().length > 0)).join(", ");
1819
+ return [
1820
+ addr.address1,
1821
+ addr.address2,
1822
+ cityStateZip,
1823
+ addr.country_code
1824
+ ].filter((p) => Boolean(p && p.trim().length > 0)).join(" • ");
1825
+ }
1826
+ function AddressSummaryCard({ address }) {
1827
+ return /* @__PURE__ */ jsxs("div", {
1828
+ className: "border-input bg-muted/30 rounded-md border p-3 text-sm break-words",
1829
+ children: [
1830
+ address.name && /* @__PURE__ */ jsx("div", {
1831
+ className: "font-medium",
1832
+ children: address.name
1833
+ }),
1834
+ /* @__PURE__ */ jsx("div", {
1835
+ className: "text-muted-foreground",
1836
+ children: address.address1
1837
+ }),
1838
+ address.address2 && /* @__PURE__ */ jsx("div", {
1839
+ className: "text-muted-foreground",
1840
+ children: address.address2
1841
+ }),
1842
+ /* @__PURE__ */ jsxs("div", {
1843
+ className: "text-muted-foreground",
1844
+ children: [[address.city, address.state].filter(Boolean).join(", "), address.postal_code ? ` ${address.postal_code}` : ""]
1845
+ }),
1846
+ address.country_code && /* @__PURE__ */ jsx("div", {
1847
+ className: "text-muted-foreground",
1848
+ children: address.country_code
1849
+ })
1850
+ ]
1851
+ });
1852
+ }
1853
+ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, error, jwt, shippingAddress, savedAddresses = [], defaultBillingAddressId, renderAddressFormDialog, t }) {
1816
1854
  const api = useFluidPayApi();
1817
1855
  const [cardError, setCardError] = useState(void 0);
1818
1856
  const [isVgsSubmitting, setIsVgsSubmitting] = useState(false);
1857
+ const [createdAddresses, setCreatedAddresses] = useState([]);
1858
+ const [isAddressDialogOpen, setIsAddressDialogOpen] = useState(false);
1819
1859
  const { isFormReady, isLoading: isVgsLoading, isScriptLoaded, scriptLoadError, initializeForm, submitCard, vgsFieldState, resetVgs, onSuccessRef, onErrorRef } = useVgsCollect();
1820
- const { control, handleSubmit, reset, setValue } = useZodForm(billingAddressSchema, { defaultValues: {
1821
- name: "",
1822
- address1: "",
1823
- address2: "",
1824
- city: "",
1825
- state: "",
1826
- zip: "",
1827
- country_code: "US",
1860
+ const shippingId = shippingAddress?.id ?? null;
1861
+ const dedupedSavedAddresses = useMemo(() => shippingId === null ? savedAddresses : savedAddresses.filter((a) => a.id !== shippingId), [savedAddresses, shippingId]);
1862
+ const allAddresses = useMemo(() => {
1863
+ const list = [];
1864
+ if (shippingAddress) list.push(shippingAddress);
1865
+ list.push(...dedupedSavedAddresses);
1866
+ list.push(...createdAddresses);
1867
+ return list;
1868
+ }, [
1869
+ shippingAddress,
1870
+ dedupedSavedAddresses,
1871
+ createdAddresses
1872
+ ]);
1873
+ const hasRealAddresses = allAddresses.length > 0;
1874
+ const initialSelection = useMemo(() => {
1875
+ if (shippingAddress) return shippingAddress.id.toString();
1876
+ if (defaultBillingAddressId && dedupedSavedAddresses.some((a) => a.id === defaultBillingAddressId)) return defaultBillingAddressId.toString();
1877
+ const first = dedupedSavedAddresses[0];
1878
+ if (first) return first.id.toString();
1879
+ return SENTINEL_CREATE_NEW;
1880
+ }, [
1881
+ shippingAddress,
1882
+ defaultBillingAddressId,
1883
+ dedupedSavedAddresses
1884
+ ]);
1885
+ const { control, handleSubmit, reset, setValue, watch } = useZodForm(formSchema, { defaultValues: {
1886
+ billing_address_selection: initialSelection,
1828
1887
  set_as_default: false
1829
1888
  } });
1830
- const billingCountry = useWatch({
1831
- control,
1832
- name: "country_code"
1833
- });
1834
- const setAsDefault = useWatch({
1835
- control,
1836
- name: "set_as_default"
1837
- });
1838
- const { stateOptions, config, handleCountryChange } = useCountryStates();
1839
- const countrySelectOptions = [...countries].map((country) => ({
1840
- name: country.name,
1841
- value: country.iso
1842
- })).sort((a, b) => {
1843
- if (a.value === billingCountry) return -1;
1844
- if (b.value === billingCountry) return 1;
1845
- return a.name.localeCompare(b.name);
1846
- });
1847
- const stateSelectOptions = stateOptions.map((state) => ({
1848
- name: state.name,
1849
- value: state.isoCode
1850
- }));
1851
- useEffect(() => {
1852
- handleCountryChange(billingCountry);
1853
- }, [billingCountry, handleCountryChange]);
1854
1889
  useEffect(() => {
1855
- if (!isOpen || !isScriptLoaded) return;
1856
- let cancelled = false;
1857
- const init = async () => {
1858
- try {
1859
- const credentials = await api.vault.fetchCredentials(jwt);
1860
- if (!cancelled) await initializeForm(credentials);
1861
- } catch (err) {
1862
- console.error("Failed to fetch vault credentials:", err);
1863
- if (!cancelled) setCardError("Failed to initialize payment form");
1864
- }
1865
- };
1866
- init();
1867
- return () => {
1868
- cancelled = true;
1869
- };
1890
+ if (isOpen) {
1891
+ reset({
1892
+ billing_address_selection: initialSelection,
1893
+ set_as_default: false
1894
+ });
1895
+ setCreatedAddresses([]);
1896
+ }
1870
1897
  }, [
1871
1898
  isOpen,
1872
- isScriptLoaded,
1873
- jwt,
1874
- api,
1875
- initializeForm
1899
+ initialSelection,
1900
+ reset
1876
1901
  ]);
1902
+ const currentSelection = watch("billing_address_selection");
1903
+ const setAsDefault = watch("set_as_default");
1904
+ const selectedAddress = useMemo(() => {
1905
+ if (!currentSelection || currentSelection === SENTINEL_CREATE_NEW) return null;
1906
+ const id = Number(currentSelection);
1907
+ if (!Number.isFinite(id)) return null;
1908
+ return allAddresses.find((a) => a.id === id) ?? null;
1909
+ }, [currentSelection, allAddresses]);
1910
+ const selectOptions = useMemo(() => {
1911
+ const options = [];
1912
+ if (shippingAddress) options.push({
1913
+ name: t("same_as_shipping"),
1914
+ value: shippingAddress.id.toString()
1915
+ });
1916
+ for (const addr of dedupedSavedAddresses) options.push({
1917
+ name: formatAddressOneLine(addr),
1918
+ value: addr.id.toString()
1919
+ });
1920
+ for (const addr of createdAddresses) options.push({
1921
+ name: formatAddressOneLine(addr),
1922
+ value: addr.id.toString()
1923
+ });
1924
+ options.push({
1925
+ name: t("use_a_different_address"),
1926
+ value: SENTINEL_CREATE_NEW
1927
+ });
1928
+ return options;
1929
+ }, [
1930
+ shippingAddress,
1931
+ dedupedSavedAddresses,
1932
+ createdAddresses,
1933
+ t
1934
+ ]);
1935
+ const handleSelectionChange = useCallback((value) => {
1936
+ if (value === SENTINEL_CREATE_NEW) {
1937
+ setIsAddressDialogOpen(true);
1938
+ return;
1939
+ }
1940
+ setValue("billing_address_selection", value, { shouldValidate: true });
1941
+ }, [setValue]);
1942
+ const handleAddressCreated = useCallback((address) => {
1943
+ setCreatedAddresses((list) => [...list, address]);
1944
+ setValue("billing_address_selection", address.id.toString(), { shouldValidate: true });
1945
+ setIsAddressDialogOpen(false);
1946
+ }, [setValue]);
1877
1947
  const handleVgsSuccess = useCallback((response) => {
1878
1948
  const expValue = response?.card_exp;
1879
1949
  if (!expValue) {
@@ -1895,31 +1965,26 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1895
1965
  return;
1896
1966
  }
1897
1967
  handleSubmit((formData) => {
1968
+ const billingAddressId = Number(formData.billing_address_selection);
1969
+ if (!Number.isFinite(billingAddressId)) {
1970
+ setCardError("Please select a billing address.");
1971
+ setIsVgsSubmitting(false);
1972
+ return;
1973
+ }
1898
1974
  onSubmit({
1899
- type: "credit_card",
1900
- country_code: formData.country_code,
1901
- default_payment_method: formData.set_as_default,
1975
+ set_as_default: formData.set_as_default,
1902
1976
  payment_method: {
1903
1977
  token: response.card_number,
1904
1978
  cvv_token: response.card_cvc,
1905
1979
  exp_month: expMonth,
1906
1980
  exp_year: expYear,
1907
- card_holder: cardholderName,
1908
- billing_zip: formData.zip
1981
+ card_holder: cardholderName
1909
1982
  },
1910
- billing_address: {
1911
- name: formData.name,
1912
- address1: formData.address1,
1913
- address2: formData.address2 ?? void 0,
1914
- city: formData.city,
1915
- state: formData.state,
1916
- zip: formData.zip,
1917
- country_code: formData.country_code
1918
- }
1983
+ billing_address_id: billingAddressId
1919
1984
  });
1920
1985
  setIsVgsSubmitting(false);
1921
1986
  }, () => {
1922
- setCardError("Please fix the errors in the billing address.");
1987
+ setCardError("Please select a billing address.");
1923
1988
  setIsVgsSubmitting(false);
1924
1989
  })();
1925
1990
  }, [handleSubmit, onSubmit]);
@@ -1936,11 +2001,35 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1936
2001
  onSuccessRef,
1937
2002
  onErrorRef
1938
2003
  ]);
2004
+ useEffect(() => {
2005
+ if (!isOpen || !isScriptLoaded) return;
2006
+ let cancelled = false;
2007
+ const init = async () => {
2008
+ try {
2009
+ const credentials = await api.vault.fetchCredentials(jwt);
2010
+ if (!cancelled) await initializeForm(credentials);
2011
+ } catch (err) {
2012
+ console.error("Failed to fetch vault credentials:", err);
2013
+ if (!cancelled) setCardError("Failed to initialize payment form");
2014
+ }
2015
+ };
2016
+ init();
2017
+ return () => {
2018
+ cancelled = true;
2019
+ };
2020
+ }, [
2021
+ isOpen,
2022
+ isScriptLoaded,
2023
+ jwt,
2024
+ api,
2025
+ initializeForm
2026
+ ]);
1939
2027
  const handleClose = () => {
1940
2028
  resetVgs();
1941
2029
  reset();
1942
2030
  setCardError(void 0);
1943
2031
  setIsVgsSubmitting(false);
2032
+ setIsAddressDialogOpen(false);
1944
2033
  onClose();
1945
2034
  };
1946
2035
  const handleFormSubmit = handleSubmit(() => {
@@ -1949,13 +2038,13 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1949
2038
  submitCard();
1950
2039
  });
1951
2040
  const isBusy = isSubmitting || isVgsSubmitting;
1952
- return /* @__PURE__ */ jsx(Dialog, {
2041
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Dialog, {
1953
2042
  open: isOpen,
1954
2043
  onOpenChange: (open) => !open && handleClose(),
1955
2044
  children: /* @__PURE__ */ jsx(DialogContent, {
1956
2045
  className: "max-h-[90vh] max-w-md overflow-y-auto p-0 md:max-w-xl",
1957
2046
  children: /* @__PURE__ */ jsxs("div", {
1958
- className: "relative p-6",
2047
+ className: "relative min-w-0 p-6",
1959
2048
  children: [
1960
2049
  (isVgsLoading || !isFormReady) && !scriptLoadError && /* @__PURE__ */ jsx("div", {
1961
2050
  className: "bg-background/80 absolute inset-0 z-10 flex items-center justify-center rounded backdrop-blur-[1px]",
@@ -1980,64 +2069,47 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1980
2069
  className: "text-muted-foreground text-sm font-medium",
1981
2070
  children: t("billing_address")
1982
2071
  }),
1983
- /* @__PURE__ */ jsx(FormSelectField, {
1984
- control,
1985
- name: "country_code",
1986
- label: t("country"),
1987
- placeholder: t("select_an_option"),
1988
- options: countrySelectOptions,
1989
- disabled: isBusy
1990
- }),
1991
- /* @__PURE__ */ jsx(FormTextField, {
1992
- control,
1993
- name: "name",
1994
- label: t("name"),
1995
- disabled: isBusy
1996
- }),
1997
- renderAddressAutocomplete ? renderAddressAutocomplete({
1998
- control,
1999
- setValue,
2000
- countryCode: billingCountry
2001
- }) : /* @__PURE__ */ jsx(FormTextField, {
2072
+ hasRealAddresses ? /* @__PURE__ */ jsx(Controller, {
2002
2073
  control,
2003
- name: "address1",
2004
- label: t("address_line_1"),
2005
- disabled: isBusy
2006
- }),
2007
- /* @__PURE__ */ jsx(FormTextField, {
2008
- control,
2009
- name: "address2",
2010
- label: t("address_line_2"),
2011
- disabled: isBusy
2074
+ name: "billing_address_selection",
2075
+ render: ({ field: { value }, fieldState: { error: fieldError } }) => /* @__PURE__ */ jsxs("div", {
2076
+ className: "space-y-1",
2077
+ children: [
2078
+ /* @__PURE__ */ jsx(Label, {
2079
+ htmlFor: "billing-address-selection",
2080
+ className: "mb-1.5 block text-sm font-medium",
2081
+ children: t("billing_address")
2082
+ }),
2083
+ /* @__PURE__ */ jsxs(Select, {
2084
+ value,
2085
+ onValueChange: handleSelectionChange,
2086
+ disabled: isBusy,
2087
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
2088
+ id: "billing-address-selection",
2089
+ "aria-invalid": !!fieldError,
2090
+ className: "w-full min-w-0 [&>span]:block! [&>span]:min-w-0 [&>span]:truncate",
2091
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: t("select_an_option") })
2092
+ }), /* @__PURE__ */ jsx(SelectContent, { children: selectOptions.map((opt) => /* @__PURE__ */ jsx(SelectItem, {
2093
+ value: opt.value,
2094
+ onClick: opt.value === SENTINEL_CREATE_NEW ? () => setIsAddressDialogOpen(true) : void 0,
2095
+ children: opt.name
2096
+ }, opt.value)) })]
2097
+ }),
2098
+ fieldError?.message && /* @__PURE__ */ jsx("p", {
2099
+ className: "text-destructive text-sm",
2100
+ children: fieldError.message
2101
+ })
2102
+ ]
2103
+ })
2104
+ }) : /* @__PURE__ */ jsx(Button, {
2105
+ type: "button",
2106
+ variant: "outline",
2107
+ onClick: () => setIsAddressDialogOpen(true),
2108
+ disabled: isBusy,
2109
+ className: "w-full",
2110
+ children: t("add_billing_address")
2012
2111
  }),
2013
- /* @__PURE__ */ jsxs("div", {
2014
- className: "flex gap-3",
2015
- children: [
2016
- /* @__PURE__ */ jsx(FormTextField, {
2017
- control,
2018
- name: "city",
2019
- label: t("city"),
2020
- containerClassName: "flex-1",
2021
- disabled: isBusy
2022
- }),
2023
- /* @__PURE__ */ jsx(FormSelectField, {
2024
- control,
2025
- name: "state",
2026
- label: config?.regionLabel ? t(config.regionLabel) : t("state"),
2027
- placeholder: t("select_state"),
2028
- options: stateSelectOptions,
2029
- containerClassName: "flex-1",
2030
- disabled: isBusy
2031
- }),
2032
- /* @__PURE__ */ jsx(FormTextField, {
2033
- control,
2034
- name: "zip",
2035
- label: config?.postalLabel ? t(config.postalLabel) : t("zip_code"),
2036
- containerClassName: "flex-1",
2037
- disabled: isBusy
2038
- })
2039
- ]
2040
- })
2112
+ selectedAddress && /* @__PURE__ */ jsx(AddressSummaryCard, { address: selectedAddress })
2041
2113
  ]
2042
2114
  })]
2043
2115
  }),
@@ -2067,7 +2139,11 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
2067
2139
  ]
2068
2140
  })
2069
2141
  })
2070
- });
2142
+ }), renderAddressFormDialog?.({
2143
+ isOpen: isAddressDialogOpen,
2144
+ onClose: () => setIsAddressDialogOpen(false),
2145
+ onAddressCreated: handleAddressCreated
2146
+ })] });
2071
2147
  }
2072
2148
  //#endregion
2073
2149
  //#region src/adapters/fluid-pay-api-adapter.ts
@@ -2300,4 +2376,4 @@ function AddressAutocompleteInput({ control, setValue, countryIso, addressLineFi
2300
2376
  //#endregion
2301
2377
  export { AddressFormDialog as a, PaymentIcon as c, UserInfoDialog as d, ConfirmActionDialog as f, useProfileTranslation as h, CreditCardFormDialog as i, getCardDisplayName as l, ProfileTranslationBridge as m, createFluidPayApiAdapter as n, EditPaymentMethodDialog as o, EllipsesDropdown as p, mapToFluidPayPaymentMethod as r, FluidPayCoreProvider as s, AddressAutocompleteInput as t, getCardExpiry as u };
2302
2378
 
2303
- //# sourceMappingURL=AddressAutocompleteInput-RLaGWKfq.mjs.map
2379
+ //# sourceMappingURL=AddressAutocompleteInput-DY0ZFQOs.mjs.map