@fluid-app/portal-sdk 0.1.253 → 0.1.255

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 (211) hide show
  1. package/dist/{AddressAutocompleteInput-Dy5sL54V.mjs → AddressAutocompleteInput-Dg-75n-K.mjs} +9 -12
  2. package/dist/AddressAutocompleteInput-Dg-75n-K.mjs.map +1 -0
  3. package/dist/{AddressAutocompleteInput-eO2ZMNvX.cjs → AddressAutocompleteInput-W2jWPYoJ.cjs} +26 -11
  4. package/dist/AddressAutocompleteInput-W2jWPYoJ.cjs.map +1 -0
  5. package/dist/{ContactsScreen-9gyQNZY-.cjs → ContactsScreen-BC5P7RD1.cjs} +2 -2
  6. package/dist/{ContactsScreen-B9I61v6-.cjs → ContactsScreen-BTBszjeo.cjs} +22 -22
  7. package/dist/{ContactsScreen-B9I61v6-.cjs.map → ContactsScreen-BTBszjeo.cjs.map} +1 -1
  8. package/dist/{ContactsScreen-gMBovFil.mjs → ContactsScreen-CYl6fWtE.mjs} +22 -22
  9. package/dist/{ContactsScreen-gMBovFil.mjs.map → ContactsScreen-CYl6fWtE.mjs.map} +1 -1
  10. package/dist/{FluidProvider-Can6hW1d.mjs → FluidProvider-B58aBJhk.mjs} +4 -5
  11. package/dist/{FluidProvider-Can6hW1d.mjs.map → FluidProvider-B58aBJhk.mjs.map} +1 -1
  12. package/dist/{FluidProvider-BLri8EGR.cjs → FluidProvider-IFbNov8P.cjs} +3 -10
  13. package/dist/{FluidProvider-BLri8EGR.cjs.map → FluidProvider-IFbNov8P.cjs.map} +1 -1
  14. package/dist/{MessagingScreen-CTjDMhpI.mjs → MessagingScreen-BU7xPuff.mjs} +2 -2
  15. package/dist/{MessagingScreen-CLnVhFC5.cjs → MessagingScreen-BohdQMST.cjs} +2 -2
  16. package/dist/{MessagingScreen-BqmMhGDq.mjs → MessagingScreen-CKE4KsvW.mjs} +2 -2
  17. package/dist/{MessagingScreen-BqmMhGDq.mjs.map → MessagingScreen-CKE4KsvW.mjs.map} +1 -1
  18. package/dist/{MessagingScreen-CLcsshRX.cjs → MessagingScreen-CrTcbztO.cjs} +2 -2
  19. package/dist/{MessagingScreen-CLcsshRX.cjs.map → MessagingScreen-CrTcbztO.cjs.map} +1 -1
  20. package/dist/{ProfileScreen-6nDSJ8F0.mjs → ProfileScreen-D42NNNqT.mjs} +3 -3
  21. package/dist/{ProfileScreen-DvWpS_uG.mjs → ProfileScreen-Dvq3SfmI.mjs} +3 -3
  22. package/dist/{ProfileScreen-DvWpS_uG.mjs.map → ProfileScreen-Dvq3SfmI.mjs.map} +1 -1
  23. package/dist/{ProfileScreen-Ckh4xGkq.cjs → ProfileScreen-LL3z9-cx.cjs} +3 -3
  24. package/dist/{ProfileScreen-Ckh4xGkq.cjs.map → ProfileScreen-LL3z9-cx.cjs.map} +1 -1
  25. package/dist/{ProfileScreen-0fVNXPBY.cjs → ProfileScreen-dU8ZM8eY.cjs} +3 -3
  26. package/dist/{ShopScreen-Cdxvxph7.cjs → ShopScreen-C4z4aB8f.cjs} +3 -3
  27. package/dist/{ShopScreen-Cdxvxph7.cjs.map → ShopScreen-C4z4aB8f.cjs.map} +1 -1
  28. package/dist/{ShopScreen-C5IVlT_r.cjs → ShopScreen-CrRI83Xk.cjs} +3 -3
  29. package/dist/{ShopScreen-CvefnY1H.mjs → ShopScreen-DXzBm27P.mjs} +3 -3
  30. package/dist/{ShopScreen-CvefnY1H.mjs.map → ShopScreen-DXzBm27P.mjs.map} +1 -1
  31. package/dist/{ShopScreen-Dyy0Yi2Q.mjs → ShopScreen-kuA8cWVc.mjs} +3 -3
  32. package/dist/{SubscriptionsScreen-ByoOMsky.cjs → SubscriptionsScreen-Bm8Ncl1e.cjs} +624 -166
  33. package/dist/SubscriptionsScreen-Bm8Ncl1e.cjs.map +1 -0
  34. package/dist/{SubscriptionsScreen-Y4UgpC1Y.mjs → SubscriptionsScreen-CsNE6gik.mjs} +627 -169
  35. package/dist/SubscriptionsScreen-CsNE6gik.mjs.map +1 -0
  36. package/dist/{SubscriptionsScreen-GCZYPM8-.cjs → SubscriptionsScreen-ztgglvXe.cjs} +2 -2
  37. package/dist/de-C_Zyp0-8.mjs +55 -0
  38. package/dist/de-C_Zyp0-8.mjs.map +1 -0
  39. package/dist/de-DeRNmEET.cjs +61 -0
  40. package/dist/de-DeRNmEET.cjs.map +1 -0
  41. package/dist/el-BD_oG0S8.cjs +61 -0
  42. package/dist/el-BD_oG0S8.cjs.map +1 -0
  43. package/dist/el-DR5yE3hc.mjs +55 -0
  44. package/dist/el-DR5yE3hc.mjs.map +1 -0
  45. package/dist/es-BBPaROwb.mjs +55 -0
  46. package/dist/es-BBPaROwb.mjs.map +1 -0
  47. package/dist/es-Bb_shBOb.cjs +61 -0
  48. package/dist/es-Bb_shBOb.cjs.map +1 -0
  49. package/dist/fr-BetvW17a.mjs +55 -0
  50. package/dist/fr-BetvW17a.mjs.map +1 -0
  51. package/dist/fr-Cah7_RPB.cjs +61 -0
  52. package/dist/fr-Cah7_RPB.cjs.map +1 -0
  53. package/dist/he-D3kODvf8.mjs +55 -0
  54. package/dist/he-D3kODvf8.mjs.map +1 -0
  55. package/dist/he-gYOd_7Xx.cjs +61 -0
  56. package/dist/he-gYOd_7Xx.cjs.map +1 -0
  57. package/dist/hu-C68EBfmm.mjs +55 -0
  58. package/dist/hu-C68EBfmm.mjs.map +1 -0
  59. package/dist/hu-Cn5739bo.cjs +61 -0
  60. package/dist/hu-Cn5739bo.cjs.map +1 -0
  61. package/dist/id-BH2K_Gbr.cjs +61 -0
  62. package/dist/id-BH2K_Gbr.cjs.map +1 -0
  63. package/dist/id-Bt8m325E.mjs +55 -0
  64. package/dist/id-Bt8m325E.mjs.map +1 -0
  65. package/dist/index.cjs +22 -58
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.mjs +23 -59
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/it-BqtPjHii.cjs +61 -0
  70. package/dist/it-BqtPjHii.cjs.map +1 -0
  71. package/dist/it-WF3n2-Dh.mjs +55 -0
  72. package/dist/it-WF3n2-Dh.mjs.map +1 -0
  73. package/dist/ja-D6Gu5dFq.cjs +61 -0
  74. package/dist/ja-D6Gu5dFq.cjs.map +1 -0
  75. package/dist/ja-DwJ0vZjy.mjs +55 -0
  76. package/dist/ja-DwJ0vZjy.mjs.map +1 -0
  77. package/dist/ko-BdbrLr2D.mjs +55 -0
  78. package/dist/ko-BdbrLr2D.mjs.map +1 -0
  79. package/dist/ko-Dl2fBpWC.cjs +61 -0
  80. package/dist/ko-Dl2fBpWC.cjs.map +1 -0
  81. package/dist/nl-CA5o2t0S.cjs +61 -0
  82. package/dist/nl-CA5o2t0S.cjs.map +1 -0
  83. package/dist/nl-CUiqH5zZ.mjs +55 -0
  84. package/dist/nl-CUiqH5zZ.mjs.map +1 -0
  85. package/dist/pl-IbyEkNiD.mjs +55 -0
  86. package/dist/pl-IbyEkNiD.mjs.map +1 -0
  87. package/dist/pl-WlQv3-yq.cjs +61 -0
  88. package/dist/pl-WlQv3-yq.cjs.map +1 -0
  89. package/dist/pt-BhhvO4Qw.mjs +55 -0
  90. package/dist/pt-BhhvO4Qw.mjs.map +1 -0
  91. package/dist/pt-Cuoe77sP.cjs +61 -0
  92. package/dist/pt-Cuoe77sP.cjs.map +1 -0
  93. package/dist/ro-DIrwj2Mc.cjs +61 -0
  94. package/dist/ro-DIrwj2Mc.cjs.map +1 -0
  95. package/dist/ro-GgbW8Cux.mjs +55 -0
  96. package/dist/ro-GgbW8Cux.mjs.map +1 -0
  97. package/dist/ru-BC9x5NIp.mjs +55 -0
  98. package/dist/ru-BC9x5NIp.mjs.map +1 -0
  99. package/dist/ru-DCHj3W_N.cjs +61 -0
  100. package/dist/ru-DCHj3W_N.cjs.map +1 -0
  101. package/dist/{static-dict-adapter-Bxrw9FK5.cjs → static-dict-adapter-BLfRl80i.cjs} +1 -2
  102. package/dist/static-dict-adapter-BLfRl80i.cjs.map +1 -0
  103. package/dist/{static-dict-adapter-Bc5RtEkZ.mjs → static-dict-adapter-CdbsRyE-.mjs} +1 -2
  104. package/dist/static-dict-adapter-CdbsRyE-.mjs.map +1 -0
  105. package/dist/th-C2DeNJoD.mjs +55 -0
  106. package/dist/th-C2DeNJoD.mjs.map +1 -0
  107. package/dist/th-CebgyxgZ.cjs +61 -0
  108. package/dist/th-CebgyxgZ.cjs.map +1 -0
  109. package/dist/tl-CxY_bq4K.mjs +55 -0
  110. package/dist/tl-CxY_bq4K.mjs.map +1 -0
  111. package/dist/tl-DlFV8z30.cjs +61 -0
  112. package/dist/tl-DlFV8z30.cjs.map +1 -0
  113. package/dist/tr-Dj-KyRbz.cjs +61 -0
  114. package/dist/tr-Dj-KyRbz.cjs.map +1 -0
  115. package/dist/tr-DjrNAJD7.mjs +55 -0
  116. package/dist/tr-DjrNAJD7.mjs.map +1 -0
  117. package/dist/zh_CN-BE-GTtuO.mjs +55 -0
  118. package/dist/zh_CN-BE-GTtuO.mjs.map +1 -0
  119. package/dist/zh_CN-s2Jm_Dbu.cjs +61 -0
  120. package/dist/zh_CN-s2Jm_Dbu.cjs.map +1 -0
  121. package/dist/zh_TW-CR1xJCr6.mjs +55 -0
  122. package/dist/zh_TW-CR1xJCr6.mjs.map +1 -0
  123. package/dist/zh_TW-t10xPnCU.cjs +61 -0
  124. package/dist/zh_TW-t10xPnCU.cjs.map +1 -0
  125. package/package.json +14 -14
  126. package/dist/AddressAutocompleteInput-Dy5sL54V.mjs.map +0 -1
  127. package/dist/AddressAutocompleteInput-eO2ZMNvX.cjs.map +0 -1
  128. package/dist/SubscriptionsScreen-ByoOMsky.cjs.map +0 -1
  129. package/dist/SubscriptionsScreen-Y4UgpC1Y.mjs.map +0 -1
  130. package/dist/de-69v-QMl3.mjs +0 -6
  131. package/dist/de-69v-QMl3.mjs.map +0 -1
  132. package/dist/de-CvBkoR8P.cjs +0 -12
  133. package/dist/de-CvBkoR8P.cjs.map +0 -1
  134. package/dist/el-CP3qYmjt.cjs +0 -12
  135. package/dist/el-CP3qYmjt.cjs.map +0 -1
  136. package/dist/el-moRf_431.mjs +0 -6
  137. package/dist/el-moRf_431.mjs.map +0 -1
  138. package/dist/es-BAjIJqb8.mjs +0 -6
  139. package/dist/es-BAjIJqb8.mjs.map +0 -1
  140. package/dist/es-DdHDXWW1.cjs +0 -12
  141. package/dist/es-DdHDXWW1.cjs.map +0 -1
  142. package/dist/fr-B6rL2HtM.mjs +0 -6
  143. package/dist/fr-B6rL2HtM.mjs.map +0 -1
  144. package/dist/fr-wZG7Wsps.cjs +0 -12
  145. package/dist/fr-wZG7Wsps.cjs.map +0 -1
  146. package/dist/he-B5y3gSwp.mjs +0 -6
  147. package/dist/he-B5y3gSwp.mjs.map +0 -1
  148. package/dist/he-C_xAhEyE.cjs +0 -12
  149. package/dist/he-C_xAhEyE.cjs.map +0 -1
  150. package/dist/hu-BYzcu3lh.mjs +0 -6
  151. package/dist/hu-BYzcu3lh.mjs.map +0 -1
  152. package/dist/hu-CttQPNpi.cjs +0 -12
  153. package/dist/hu-CttQPNpi.cjs.map +0 -1
  154. package/dist/id-D_R-JS-K.mjs +0 -6
  155. package/dist/id-D_R-JS-K.mjs.map +0 -1
  156. package/dist/id-iykEHp5z.cjs +0 -12
  157. package/dist/id-iykEHp5z.cjs.map +0 -1
  158. package/dist/it-BM8H-5lK.mjs +0 -6
  159. package/dist/it-BM8H-5lK.mjs.map +0 -1
  160. package/dist/it-aOan3LJA.cjs +0 -12
  161. package/dist/it-aOan3LJA.cjs.map +0 -1
  162. package/dist/ja-DJwh8O25.cjs +0 -12
  163. package/dist/ja-DJwh8O25.cjs.map +0 -1
  164. package/dist/ja-uq5fuZ2n.mjs +0 -6
  165. package/dist/ja-uq5fuZ2n.mjs.map +0 -1
  166. package/dist/ko-BrOveybS.cjs +0 -12
  167. package/dist/ko-BrOveybS.cjs.map +0 -1
  168. package/dist/ko-DCZTj-Cn.mjs +0 -6
  169. package/dist/ko-DCZTj-Cn.mjs.map +0 -1
  170. package/dist/nl-BOJJj-wO.mjs +0 -6
  171. package/dist/nl-BOJJj-wO.mjs.map +0 -1
  172. package/dist/nl-CwVoaQ7l.cjs +0 -12
  173. package/dist/nl-CwVoaQ7l.cjs.map +0 -1
  174. package/dist/pl-Cjublhfj.mjs +0 -6
  175. package/dist/pl-Cjublhfj.mjs.map +0 -1
  176. package/dist/pl-CxlPZSW0.cjs +0 -12
  177. package/dist/pl-CxlPZSW0.cjs.map +0 -1
  178. package/dist/pt-DIdr0upI.cjs +0 -12
  179. package/dist/pt-DIdr0upI.cjs.map +0 -1
  180. package/dist/pt-Dj1-G3ee.mjs +0 -6
  181. package/dist/pt-Dj1-G3ee.mjs.map +0 -1
  182. package/dist/ro-94vihNFf.mjs +0 -6
  183. package/dist/ro-94vihNFf.mjs.map +0 -1
  184. package/dist/ro-B_Do9sPB.cjs +0 -12
  185. package/dist/ro-B_Do9sPB.cjs.map +0 -1
  186. package/dist/ru-CeRancbh.cjs +0 -12
  187. package/dist/ru-CeRancbh.cjs.map +0 -1
  188. package/dist/ru-DoATiIwu.mjs +0 -6
  189. package/dist/ru-DoATiIwu.mjs.map +0 -1
  190. package/dist/static-dict-adapter-Bc5RtEkZ.mjs.map +0 -1
  191. package/dist/static-dict-adapter-Bxrw9FK5.cjs.map +0 -1
  192. package/dist/th-B43cNBU0.cjs +0 -12
  193. package/dist/th-B43cNBU0.cjs.map +0 -1
  194. package/dist/th-YR02xDFQ.mjs +0 -6
  195. package/dist/th-YR02xDFQ.mjs.map +0 -1
  196. package/dist/tl-CHqst9js.cjs +0 -12
  197. package/dist/tl-CHqst9js.cjs.map +0 -1
  198. package/dist/tl-RXmEp0_X.mjs +0 -6
  199. package/dist/tl-RXmEp0_X.mjs.map +0 -1
  200. package/dist/tr-BuEAVG9I.mjs +0 -6
  201. package/dist/tr-BuEAVG9I.mjs.map +0 -1
  202. package/dist/tr-DYe4JMxj.cjs +0 -12
  203. package/dist/tr-DYe4JMxj.cjs.map +0 -1
  204. package/dist/zh_CN-CUeI99z0.cjs +0 -12
  205. package/dist/zh_CN-CUeI99z0.cjs.map +0 -1
  206. package/dist/zh_CN-NCLMiB-i.mjs +0 -6
  207. package/dist/zh_CN-NCLMiB-i.mjs.map +0 -1
  208. package/dist/zh_TW-CgTn_SV4.cjs +0 -12
  209. package/dist/zh_TW-CgTn_SV4.cjs.map +0 -1
  210. package/dist/zh_TW-CtEmIukX.mjs +0 -6
  211. package/dist/zh_TW-CtEmIukX.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionsScreen-Bm8Ncl1e.cjs","names":["addDays","addMonths","getInternalDefaultOptions","toDate","constructFrom","constructFrom","millisecondsInHour","millisecondsInMinute","millisecondsInSecond","getWeekYear","startOfWeek","constructFrom","startOfISOWeek","toDate","getWeek","startOfWeek","toDate","getISOWeek","startOfISOWeek","getDefaultOptions","toDate","addDays","toDate","addDays","constructFrom","getTimezoneOffsetInMilliseconds","constructFrom","getTimezoneOffsetInMilliseconds","constructFrom","constructFrom","constructFrom","defaultLocale","toDate","longFormatters","isProtectedWeekYearToken","isProtectedDayOfYearToken","usePortalTenantClient","ToggleGroup","ToggleGroupItem","SearchSort","Skeleton","Table","TableHeader","TableRow","TableColumn","TableBody","TableCell","InfiniteScrollSentinel","SubscriptionsListScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","useAppNavigation","SubscriptionsListScreenContent","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","Label","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","AlertDialogFooter","AlertDialogCancel","format","Dialog","DialogContent","DialogHeader","DialogTitle","Label","DialogFooter","Button","addDays","format","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Popover","PopoverTrigger","Button","cn","CalendarIcon","PopoverContent","Calendar","DialogFooter","addDays","addMonths","isAfter","format","ChevronLeft","cn","ChevronRight","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Popover","PopoverTrigger","Button","CalendarIcon","PopoverContent","Calendar","DialogFooter","Skeleton","Input","cn","Button","SkipForward","CalendarDays","Pause","XCircle","Play","RotateCcw","format","addMonths","SubscriptionDetailScreen","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","getCardExpiry","cn","ChevronDown","PaymentIcon","getCardDisplayName","Skeleton","EllipsesDropdown","t","usePayApi","createFluidPayApiAdapter","payKeys","mapToFluidPayPaymentMethod","useCountriesApi","storeKeys","FluidPayCoreProvider","ProfileUIProvider","CreditCardFormDialog","AddressAutocompleteInput","EditPaymentMethodDialog","ConfirmActionDialog","cn","ChevronDown","Skeleton","EllipsesDropdown","usePayApi","createFluidPayApiAdapter","payKeys","useCountriesApi","storeKeys","FluidPayCoreProvider","ProfileUIProvider","AddressFormDialog","AddressAutocompleteInput","ConfirmActionDialog","useAppNavigation","SubscriptionDetailScreenContent","useAppNavigation","useAccount"],"sources":["../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addWeeks.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addYears.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getDefaultOptions.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getISODay.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/transpose.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/Setter.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/Parser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/EraParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/utils.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/YearParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/MonthParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setWeek.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setISOWeek.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/DateParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setDay.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/DayParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setISODay.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/SecondParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse.js","../../../subscriptions/core/src/subscriptions-api-context.ts","../../../subscriptions/core/src/provider.tsx","../../../subscriptions/core/src/query-keys.ts","../../../subscriptions/core/src/hooks/use-subscriptions.ts","../../../subscriptions/core/src/hooks/use-infinite-subscriptions.ts","../../../subscriptions/core/src/hooks/use-subscription.ts","../../../subscriptions/core/src/hooks/use-pause-subscription.ts","../../../subscriptions/core/src/hooks/use-resume-subscription.ts","../../../subscriptions/core/src/hooks/use-skip-subscription.ts","../../../subscriptions/core/src/hooks/use-cancel-subscription.ts","../../../subscriptions/core/src/hooks/use-reactivate-subscription.ts","../../../subscriptions/core/src/hooks/use-update-subscription-info.ts","../../../subscriptions/core/src/utils/subscription-helpers.ts","../src/adapters/subscriptions-api-adapter.ts","../src/subscriptions/PortalSubscriptionsApiProvider.tsx","../../../subscriptions/ui/src/lib/format.ts","../../../subscriptions/ui/src/lib/cn.ts","../../../subscriptions/ui/src/components/status-pill.tsx","../../../subscriptions/ui/src/components/subscriptions-list.tsx","../../../subscriptions/ui/src/screens/SubscriptionsListScreen.tsx","../src/screens/SubscriptionsListScreen.tsx","../../../subscriptions/ui/src/components/cancel-subscription-dialog.tsx","../../../subscriptions/ui/src/components/pause-subscription-dialog.tsx","../../../subscriptions/ui/src/lib/parse-iso-date.ts","../../../subscriptions/ui/src/components/resume-subscription-dialog.tsx","../../../subscriptions/ui/src/components/edit-bill-date-dialog.tsx","../../../subscriptions/ui/src/components/subscription-detail.tsx","../../../subscriptions/ui/src/screens/SubscriptionDetailScreen.tsx","../src/subscriptions/SelectablePaymentMethodDropdown.tsx","../src/subscriptions/PortalSubscriptionPaymentMethodSection.tsx","../src/subscriptions/SelectableAddressDropdown.tsx","../src/subscriptions/PortalSubscriptionShippingAddressSection.tsx","../src/screens/SubscriptionDetailScreen.tsx","../src/screens/SubscriptionsScreen.tsx"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date, options) {\n const day = toDate(date, options?.in).getDay();\n return day === 0 ? 7 : day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(date, constructor) {\n const date_ = isConstructor(constructor)\n ? new constructor(0)\n : constructFrom(constructor, 0);\n date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n date_.setHours(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n return date_;\n}\n\nfunction isConstructor(constructor) {\n return (\n typeof constructor === \"function\" &&\n constructor.prototype?.constructor === constructor\n );\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n\n constructor(context, reference) {\n super();\n this.context = context || ((date) => constructFrom(reference, date));\n }\n\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, this.context));\n }\n}\n","import { ValueSetter } from \"./Setter.js\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","import { Parser } from \"../Parser.js\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.js\";\n\nimport { numericPatterns } from \"./constants.js\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.js\";\n\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigitsSigned } from \"../utils.js\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { parseNDigits } from \"../utils.js\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const date_ = toDate(date, options?.in);\n const diff = getWeek(date_, options) - week;\n date_.setDate(date_.getDate() - diff * 7);\n return toDate(date_, options?.in);\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week, options) {\n const _date = toDate(date, options?.in);\n const diff = getISOWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.js\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const date_ = toDate(date, options?.in);\n const currentDay = date_.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day, options) {\n const date_ = toDate(date, options?.in);\n const currentDay = getISODay(date_, options);\n const diff = day - currentDay;\n return addDays(date_, diff, options);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { dayPeriodEnumToHours } from \"../utils.js\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.js\";\n\nimport { mapValue, parseNDigits } from \"../utils.js\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseTimezonePattern } from \"../utils.js\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\n\nimport { parseAnyDigitsSigned } from \"../utils.js\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (!formatStr)\n return dateStr ? invalidDate() : toDate(referenceDate, options?.in);\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will try to use the context or\n // the reference date and fallback to the system time zone.\n const setters = [new DateTimezoneSetter(options?.in, referenceDate)];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return invalidDate();\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return invalidDate();\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return invalidDate();\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate, options?.in);\n\n if (isNaN(+date)) return invalidDate();\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return invalidDate();\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return date;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","import { createContext, useContext } from \"react\";\nimport type { SubscriptionsApi } from \"./subscriptions-api\";\n\nconst SubscriptionsApiContext = createContext<SubscriptionsApi | null>(null);\n\nexport const SubscriptionsApiProvider = SubscriptionsApiContext.Provider;\n\nexport function useSubscriptionsApi(): SubscriptionsApi {\n const api = useContext(SubscriptionsApiContext);\n if (!api) {\n throw new Error(\n \"useSubscriptionsApi must be used within a SubscriptionsCoreProvider\",\n );\n }\n return api;\n}\n","import type { JSX } from \"react\";\nimport type { SubscriptionsApi } from \"./subscriptions-api\";\nimport { SubscriptionsApiProvider } from \"./subscriptions-api-context\";\n\nexport interface SubscriptionsCoreProviderProps {\n api: SubscriptionsApi;\n children: React.ReactNode;\n}\n\nexport function SubscriptionsCoreProvider({\n api,\n children,\n}: SubscriptionsCoreProviderProps): JSX.Element {\n return (\n <SubscriptionsApiProvider value={api}>{children}</SubscriptionsApiProvider>\n );\n}\n","import type { subscriptions } from \"./types\";\n\nexport const subscriptionsKeys = {\n all: [\"subscriptions\"] as const,\n list: (params?: subscriptions.FetchSubscriptionsParams) =>\n [...subscriptionsKeys.all, \"list\", params] as const,\n detail: (token: string) =>\n [...subscriptionsKeys.all, \"detail\", token] as const,\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useSubscriptions(\n params: subscriptions.FetchSubscriptionsParams,\n options?: { enabled?: boolean },\n) {\n const api = useSubscriptionsApi();\n return useQuery({\n queryKey: subscriptionsKeys.list(params),\n queryFn: () => api.fetchCustomerSubscriptions(params),\n enabled: options?.enabled ?? !!params.customerId,\n });\n}\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useInfiniteSubscriptions(\n params: Omit<subscriptions.FetchSubscriptionsParams, \"cursor\" | \"page\">,\n options?: { enabled?: boolean },\n) {\n const api = useSubscriptionsApi();\n return useInfiniteQuery({\n queryKey: [...subscriptionsKeys.all, \"infinite-list\", params],\n queryFn: ({ pageParam }) =>\n api.fetchCustomerSubscriptions({\n ...params,\n cursor: pageParam,\n limit: params.limit ?? params.perPage,\n }),\n getNextPageParam: (lastPage) =>\n lastPage.meta?.pagination?.next_cursor ?? undefined,\n initialPageParam: undefined as string | undefined,\n enabled: options?.enabled ?? !!params.customerId,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useSubscription(\n token: string,\n options?: { enabled?: boolean },\n) {\n const api = useSubscriptionsApi();\n return useQuery({\n queryKey: subscriptionsKeys.detail(token),\n queryFn: () => api.fetchSubscription(token),\n enabled: (options?.enabled ?? true) && !!token,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function usePauseSubscription(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: {\n subscriptionToken: string;\n pauseParams: subscriptions.PauseSubscriptionParams;\n }) => api.pauseSubscription(params.subscriptionToken, params.pauseParams),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useResumeSubscription(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: {\n subscriptionToken: string;\n resumeParams: subscriptions.ResumeSubscriptionParams;\n }) => api.resumeSubscription(params.subscriptionToken, params.resumeParams),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useSkipSubscription(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: {\n subscriptionToken: string;\n skipParams: subscriptions.SkipSubscriptionParams;\n }) => api.skipSubscription(params.subscriptionToken, params.skipParams),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useCancelSubscription(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: { subscriptionToken: string; customerId?: number }) =>\n api.cancelSubscription(params.subscriptionToken, params.customerId),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useReactivateSubscription(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: {\n subscriptionToken: string;\n reactivateParams: subscriptions.ReactivateSubscriptionParams;\n }) =>\n api.reactivateSubscription(\n params.subscriptionToken,\n params.reactivateParams,\n ),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { subscriptions } from \"../types\";\nimport { subscriptionsKeys } from \"../query-keys\";\nimport { useSubscriptionsApi } from \"../subscriptions-api-context\";\n\nexport function useUpdateSubscriptionInfo(options?: {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}) {\n const api = useSubscriptionsApi();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (params: {\n subscriptionToken: string;\n body: Partial<\n Pick<\n subscriptions.UpdateSubscriptionInfoBody,\n \"payment_method_id\" | \"quantity\" | \"address_id\" | \"next_bill_date\"\n >\n >;\n }) => api.updateSubscriptionInfo(params.subscriptionToken, params.body),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: subscriptionsKeys.all });\n options?.onSuccess?.();\n },\n onError: options?.onError,\n });\n}\n","interface SubscriptionPriceItem {\n allow_subscription: boolean;\n subscription_interval: number | null;\n subscription_price_in_currency: string | null;\n}\n\nexport function getSubscriptionPrice(\n item: SubscriptionPriceItem,\n): string | null {\n if (!item.allow_subscription) return null;\n const intervalText =\n item.subscription_interval === 1\n ? \"month\"\n : `${item.subscription_interval} mo.`;\n return `${item.subscription_price_in_currency}/${intervalText}`;\n}\n\nexport function formatSubscriptionFrequency(frequency: string): string {\n if (frequency === \"day\") return \"Daily\";\n if (frequency === \"week\") return \"Weekly\";\n if (frequency === \"month\") return \"Monthly\";\n if (frequency === \"year\") return \"Yearly\";\n return frequency;\n}\n\nexport function calculateResumeDate(\n billingInterval: number,\n billingIntervalUnit: string,\n orderCount: number,\n fromDate?: string | Date | null,\n): Date {\n let startDate: Date;\n\n if (fromDate) {\n if (typeof fromDate === \"string\") {\n startDate = new Date(\n fromDate + (fromDate.includes(\"T\") ? \"\" : \"T12:00:00.000Z\"),\n );\n } else {\n startDate = new Date(\n Date.UTC(\n fromDate.getUTCFullYear(),\n fromDate.getUTCMonth(),\n fromDate.getUTCDate(),\n 12,\n 0,\n 0,\n 0,\n ),\n );\n }\n } else {\n const now = new Date();\n startDate = new Date(\n Date.UTC(\n now.getUTCFullYear(),\n now.getUTCMonth(),\n now.getUTCDate(),\n 12,\n 0,\n 0,\n 0,\n ),\n );\n }\n\n const baseDate = new Date(startDate.getTime());\n const totalIntervals = billingInterval * orderCount;\n\n switch (billingIntervalUnit.toLowerCase()) {\n case \"day\":\n baseDate.setUTCDate(baseDate.getUTCDate() + totalIntervals);\n break;\n case \"week\":\n baseDate.setUTCDate(baseDate.getUTCDate() + totalIntervals * 7);\n break;\n case \"month\": {\n const currentMonth = baseDate.getUTCMonth();\n const currentDay = baseDate.getUTCDate();\n baseDate.setUTCMonth(currentMonth + totalIntervals);\n if (baseDate.getUTCDate() !== currentDay) {\n baseDate.setUTCDate(0);\n }\n break;\n }\n case \"year\":\n baseDate.setUTCFullYear(baseDate.getUTCFullYear() + totalIntervals);\n break;\n default: {\n const defaultMonth = baseDate.getUTCMonth();\n const defaultDay = baseDate.getUTCDate();\n baseDate.setUTCMonth(defaultMonth + totalIntervals);\n if (baseDate.getUTCDate() !== defaultDay) {\n baseDate.setUTCDate(0);\n }\n }\n }\n\n return baseDate;\n}\n\nexport function calculateNextBillDate(\n billingInterval: number = 1,\n billingIntervalUnit: string = \"month\",\n): string {\n const now = new Date();\n const nextBillDate = new Date(now);\n\n switch (billingIntervalUnit.toLowerCase()) {\n case \"day\":\n nextBillDate.setDate(now.getDate() + billingInterval);\n break;\n case \"week\":\n nextBillDate.setDate(now.getDate() + billingInterval * 7);\n break;\n case \"month\":\n nextBillDate.setMonth(now.getMonth() + billingInterval);\n break;\n case \"year\":\n nextBillDate.setFullYear(now.getFullYear() + billingInterval);\n break;\n default:\n nextBillDate.setMonth(now.getMonth() + billingInterval);\n }\n\n return nextBillDate.toISOString().split(\"T\")[0] || \"\";\n}\n\nexport function formatDate(\n dateString: string,\n isCancelled: boolean = false,\n): string {\n if (isCancelled) return \"Cancelled\";\n if (!dateString) return \"Paused\";\n\n const datePortion = dateString.split(\"T\")[0] ?? dateString;\n const parts = datePortion.split(\"-\");\n if (parts.length !== 3) return \"Invalid date\";\n\n const [year, month, day] = parts.map(Number);\n if (!year || !month || !day) return \"Invalid date\";\n const date = new Date(year, month - 1, day);\n\n const monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n\n const dayNum = date.getDate();\n const monthName = monthNames[date.getMonth()];\n const yearNum = date.getFullYear();\n\n const ordinalSuffix = (d: number) => {\n if (d > 3 && d < 21) return \"th\";\n switch (d % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n };\n\n return `${monthName} ${dayNum}${ordinalSuffix(dayNum)}, ${yearNum}`;\n}\n\nexport function getNextBillDisplay<\n T extends { status?: string; next_bill_date?: string | null },\n>(subscription: T | null | undefined): string {\n if (subscription?.status === \"cancelled\") return \"Cancelled\";\n if (subscription?.next_bill_date)\n return formatDate(subscription.next_bill_date);\n if (subscription?.status === \"paused\") return \"Paused\";\n return \"N/A\";\n}\n\nexport function calculateSubscriptionPrice(\n totalPrice: number,\n subscribeAndSave: string | null | undefined,\n quantity: number,\n): string {\n if (!subscribeAndSave) return totalPrice.toFixed(2);\n\n const unitDiscountAmount = parseFloat(subscribeAndSave);\n if (isNaN(unitDiscountAmount)) return totalPrice.toFixed(2);\n\n const subscriptionAmount = totalPrice - unitDiscountAmount * quantity;\n return subscriptionAmount.toFixed(2);\n}\n","import type { SubscriptionsApi } from \"@fluid-app/subscriptions-core\";\nimport type { subscriptions } from \"@fluid-app/subscriptions-core\";\nimport type { FetchClient } from \"@fluid-app/portal-tenant-api-client\";\nimport { portalTenant } from \"@fluid-app/portal-tenant-api-client\";\n\n/**\n * Maps the BFF meta envelope to the port's expected shape.\n */\nfunction mapMeta(raw: { request_id?: string | null; timestamp?: string }): {\n request_id: string;\n timestamp: string;\n} {\n return {\n request_id: raw.request_id ?? \"\",\n timestamp: raw.timestamp ?? \"\",\n };\n}\n\ntype BffSubscriptionResponse = Awaited<\n ReturnType<typeof portalTenant.subscriptions_show>\n>;\n\ntype BffListResponse = Awaited<\n ReturnType<typeof portalTenant.subscriptions_list>\n>;\n\ntype BffSubscription = NonNullable<BffSubscriptionResponse[\"subscription\"]>;\n\n/**\n * Safely parses a price string to a number, returning the fallback if the\n * result is NaN (e.g. non-numeric strings from a malformed BFF response).\n */\nfunction safeParsePrice(\n value: string | null | undefined,\n fallback = 0,\n): number {\n if (!value) return fallback;\n const parsed = parseFloat(value);\n return Number.isNaN(parsed) ? fallback : parsed;\n}\n\n/**\n * Maps a BFF subscription detail response to the port's SubscriptionDetail.\n *\n * The BFF returns a flat Subscription schema (plan_name, product, etc.) while\n * the port expects richly nested objects (subscription_plan, variant.product).\n * This explicitly maps every field the UI accesses so undefined-property crashes\n * are caught here at the adapter boundary rather than deep in the component tree.\n */\nfunction mapDetailSubscription(\n bff: BffSubscription,\n): subscriptions.SubscriptionDetailSubscription {\n const price = safeParsePrice(bff.total);\n\n return {\n id: bff.id ?? 0,\n subscription_token: bff.token ?? \"\",\n status: bff.status ?? \"\",\n quantity: bff.quantity ?? 1,\n price,\n original_price: safeParsePrice(bff.original_price, price),\n next_bill_date: bff.next_billing_date ?? null,\n last_bill_date: bff.last_billing_date ?? null,\n next_ship_date: null,\n last_ship_date: null,\n disabled: false,\n attempts: 0,\n last_failed_at: null,\n next_retry_at: null,\n skipped_count: 0,\n max_skips: null,\n cancelled_at: null,\n created_at: bff.created_at ?? \"\",\n updated_at: bff.updated_at ?? \"\",\n notes: null,\n subscription_plan: {\n id: bff.plan?.id ?? 0,\n name: bff.plan?.name ?? bff.plan_name ?? \"\",\n billing_interval: bff.plan?.billing_interval ?? 1,\n billing_interval_unit:\n bff.plan?.billing_interval_unit ?? bff.interval ?? \"month\",\n billing_frequency_in_words: bff.plan?.billing_interval_unit\n ? `Every ${bff.plan.billing_interval ?? 1} ${bff.plan.billing_interval_unit}`\n : \"\",\n shipping_interval: 1,\n shipping_interval_unit:\n bff.plan?.billing_interval_unit ?? bff.interval ?? \"month\",\n trial_period: null,\n trial_period_unit: null,\n split_volume: false,\n allow_skipping: bff.plan?.allow_skipping ?? false,\n max_skips: bff.plan?.max_skips ?? null,\n price_adjustment_type: null,\n price_adjustment_amount: null,\n max_quantity: null,\n active: true,\n company_default: null,\n created_at: \"\",\n updated_at: \"\",\n products_count: null,\n subscribers_count: null,\n },\n customer: {\n id: 0,\n account_id: null,\n first_name: null,\n last_name: null,\n full_name: bff.customer_name ?? \"\",\n email: \"\",\n verified_email: null,\n phone: null,\n orders_count: null,\n created_at: \"\",\n display_total_spent: \"0\",\n metadata: {},\n user_company_id: null,\n external_id: null,\n last_order_id: null,\n notes: null,\n active: true,\n total_spent: 0,\n customer_notes: [],\n default_address: null,\n addresses: [],\n active_subscriptions_count: 0,\n inactive_subscriptions_count: 0,\n is_rep: false,\n },\n variant: {\n id: bff.product?.id ?? 0,\n title: bff.product?.variant_name ?? \"\",\n image_url: bff.product?.image_url ?? null,\n image_path: null,\n sku: null,\n primary_image: bff.product?.image_url ?? null,\n price: bff.total ? safeParsePrice(bff.total) : null,\n price_in_currency: bff.total ?? \"0\",\n options: [],\n product: {\n id: bff.product?.id ?? 0,\n title: bff.product?.name ?? \"\",\n image_url: bff.product?.image_url ?? null,\n image_path: null,\n price: bff.total ? safeParsePrice(bff.total) : null,\n cv: null,\n tax: null,\n sku: null,\n price_in_currency: bff.total ?? \"0\",\n tax_in_currency: \"0\",\n cv_in_currency: \"0\",\n },\n },\n address: bff.address\n ? {\n id: bff.address.id ?? 0,\n name: bff.address.name ?? null,\n address1: bff.address.address1 ?? \"\",\n address2: bff.address.address2 ?? null,\n city: bff.address.city ?? \"\",\n state: bff.address.state ?? \"\",\n subdivision_code: null,\n postal_code: bff.address.postal_code ?? \"\",\n country_code: bff.address.country_code ?? null,\n default: false,\n }\n : {\n id: 0,\n name: null,\n address1: \"\",\n address2: null,\n city: \"\",\n state: \"\",\n subdivision_code: null,\n postal_code: \"\",\n country_code: null,\n default: false,\n },\n payment_method: bff.payment_method\n ? {\n id: bff.payment_method.id ?? 0,\n source: bff.payment_method.source ?? \"\",\n payment_type:\n bff.payment_method.payment_type ?? bff.payment_method.source ?? \"\",\n created_at: \"\",\n updated_at: \"\",\n default: false,\n details: {\n card_type: bff.payment_method.card_type ?? undefined,\n last4: bff.payment_method.last4 ?? undefined,\n },\n }\n : {\n id: 0,\n source: \"\",\n payment_type: \"\",\n created_at: \"\",\n updated_at: \"\",\n default: false,\n details: {},\n },\n currency: {\n id: 0,\n name: bff.currency ?? null,\n code: bff.currency ?? \"USD\",\n rate: null,\n active: true,\n symbol: null,\n },\n country: { id: 0, name: \"\", iso: \"\" },\n company: { id: 0, name: \"\" },\n subscription_skips: [],\n orders: [],\n };\n}\n\nfunction mapSubscriptionDetail(\n response: BffSubscriptionResponse,\n): subscriptions.SubscriptionDetail {\n const bff = response.subscription;\n if (!bff) {\n throw new Error(\n \"BFF returned a successful response but subscription data was missing\",\n );\n }\n return {\n subscription: mapDetailSubscription(bff),\n meta: response.meta ? mapMeta(response.meta) : undefined,\n };\n}\n\n/**\n * Maps a BFF list subscription to the port's SubscriptionListItem.\n *\n * The BFF returns a flat shape with `product` and `quantity` while the port\n * expects nested `variant.product` (from the admin API). This bridges the two\n * so the UI layer sees a consistent shape regardless of which API backs it.\n */\nfunction mapListItem(\n bff: NonNullable<BffListResponse[\"subscriptions\"]>[number],\n): subscriptions.SubscriptionListItem {\n return {\n id: bff.id ?? 0,\n subscription_token: bff.token ?? \"\",\n created_at: bff.created_at ?? \"\",\n customer: {\n id: 0,\n account_id: \"\",\n active: true,\n display_total_spent: \"0\",\n email: \"\",\n first_name: \"\",\n full_name: bff.customer_name ?? \"\",\n is_rep: false,\n last_name: \"\",\n orders_count: 0,\n phone: null,\n total_spent: \"0\",\n user_company_id: null,\n },\n last_bill_date: null,\n next_bill_date: bff.next_billing_date ?? null,\n price: safeParsePrice(bff.total),\n quantity: bff.quantity ?? 1,\n status: bff.status ?? \"\",\n subscription_plan: {\n id: 0,\n active: true,\n billing_interval: 1,\n billing_interval_unit: bff.interval ?? \"\",\n shipping_interval: 1,\n shipping_interval_unit: bff.interval ?? \"\",\n },\n variant: {\n id: bff.product?.id ?? 0,\n title: bff.product?.variant_name ?? \"\",\n product: {\n id: bff.product?.id ?? 0,\n title: bff.product?.name ?? \"\",\n image_url: bff.product?.image_url ?? \"\",\n price_in_currency: bff.total ?? \"0\",\n },\n },\n };\n}\n\nfunction mapSubscriptionList(\n response: BffListResponse,\n): subscriptions.SubscriptionsResponse {\n const raw = response.meta ?? {};\n return {\n subscriptions: (response.subscriptions ?? []).map(mapListItem),\n meta: {\n ...mapMeta(raw),\n pagination: raw.pagination\n ? {\n cursor: raw.pagination.cursor ?? null,\n limit: raw.pagination.limit,\n next_cursor: raw.pagination.next_cursor ?? null,\n prev_cursor: raw.pagination.prev_cursor ?? null,\n }\n : undefined,\n },\n };\n}\n\n/**\n * Creates a SubscriptionsApi-compatible adapter backed by the portal-tenant BFF.\n *\n * Uses async/await with explicit field mapping. The BFF returns simplified\n * subscription types compared to the full admin API; the adapter maps the\n * response envelope and provides runtime defaults for optional fields.\n */\nexport function createPortalSubscriptionsAdapter(\n client: FetchClient,\n): SubscriptionsApi {\n return {\n fetchCustomerSubscriptions: async (\n params: subscriptions.FetchSubscriptionsParams,\n ) => {\n const rawStatus = params.status;\n const status =\n rawStatus === \"active\" || rawStatus === \"inactive\"\n ? rawStatus\n : undefined;\n const response = await portalTenant.subscriptions_list(client, {\n \"page[cursor]\": params.cursor,\n \"page[limit]\": params.limit ?? params.perPage,\n status,\n q: params.search ?? undefined,\n });\n return mapSubscriptionList(response);\n },\n\n fetchSubscription: async (subscriptionToken: string) => {\n const response = await portalTenant.subscriptions_show(\n client,\n subscriptionToken,\n );\n return mapSubscriptionDetail(response);\n },\n\n pauseSubscription: async (\n subscriptionToken: string,\n params: subscriptions.PauseSubscriptionParams,\n ) => {\n const body: {\n next_bill_date?: string;\n number_of_orders?: number;\n } = {};\n if (params.nextBillDate != null)\n body.next_bill_date = params.nextBillDate;\n if (params.numberOfOrders != null)\n body.number_of_orders = params.numberOfOrders;\n const response = await portalTenant.subscriptions_pause(\n client,\n subscriptionToken,\n body,\n );\n return mapSubscriptionDetail(response);\n },\n\n resumeSubscription: async (\n subscriptionToken: string,\n params: subscriptions.ResumeSubscriptionParams,\n ) => {\n const response = await portalTenant.subscriptions_resume(\n client,\n subscriptionToken,\n { next_bill_date: params.nextBillDate },\n );\n return mapSubscriptionDetail(response);\n },\n\n skipSubscription: async (\n subscriptionToken: string,\n _params: subscriptions.SkipSubscriptionParams,\n ) => {\n const response = await portalTenant.subscriptions_skip(\n client,\n subscriptionToken,\n );\n return mapSubscriptionDetail(response);\n },\n\n cancelSubscription: async (\n subscriptionToken: string,\n _customerId?: number,\n ) => {\n const response = await portalTenant.subscriptions_cancel(\n client,\n subscriptionToken,\n );\n return mapSubscriptionDetail(response);\n },\n\n reactivateSubscription: async (\n subscriptionToken: string,\n _params: subscriptions.ReactivateSubscriptionParams,\n ) => {\n const response = await portalTenant.subscriptions_reactivate(\n client,\n subscriptionToken,\n );\n return mapSubscriptionDetail(response);\n },\n\n updateSubscriptionInfo: async (\n subscriptionToken: string,\n body: Partial<\n Pick<\n subscriptions.UpdateSubscriptionInfoBody,\n \"payment_method_id\" | \"quantity\" | \"address_id\" | \"next_bill_date\"\n >\n >,\n ) => {\n const subscription: {\n payment_method_id?: number;\n quantity?: number;\n address_id?: number;\n next_bill_date?: string;\n } = {};\n if (body.payment_method_id != null) {\n subscription.payment_method_id = body.payment_method_id;\n }\n if (body.quantity != null) {\n subscription.quantity = body.quantity;\n }\n if (body.address_id != null) {\n subscription.address_id = body.address_id;\n }\n if (body.next_bill_date != null) {\n subscription.next_bill_date = body.next_bill_date;\n }\n const response = await portalTenant.subscriptions_update(\n client,\n subscriptionToken,\n { subscription },\n );\n return mapSubscriptionDetail(response);\n },\n };\n}\n","import { useMemo, type ReactElement, type ReactNode } from \"react\";\nimport { SubscriptionsCoreProvider } from \"@fluid-app/subscriptions-core\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { createPortalSubscriptionsAdapter } from \"../adapters/subscriptions-api-adapter\";\n\nexport function PortalSubscriptionsApiProvider({\n children,\n}: {\n children: ReactNode;\n}): ReactElement {\n const client = usePortalTenantClient();\n\n const api = useMemo(() => createPortalSubscriptionsAdapter(client), [client]);\n\n return (\n <SubscriptionsCoreProvider api={api}>{children}</SubscriptionsCoreProvider>\n );\n}\n","/**\n * Format a number as currency (USD).\n */\nexport function formatCurrency(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value);\n}\n\n/**\n * Convert a snake_case or lowercase string to Start Case.\n * Replaces lodash startCase for simple status strings.\n */\nexport function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\n/**\n * Format a next bill date string to M/D/YYYY (UTC).\n */\nexport function formatNextBillDate(nextBillDate: string): string {\n if (!nextBillDate) return \"N/A\";\n const date = new Date(nextBillDate);\n if (isNaN(date.getTime())) return \"N/A\";\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const year = date.getUTCFullYear();\n return `${month}/${day}/${year}`;\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import type { JSX } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nconst STATUS_COLORS: Record<string, string> = {\n active: \"bg-green-100 text-green-800\",\n paused: \"bg-gray-100 text-gray-800\",\n cancelled: \"bg-red-100 text-red-800\",\n pending: \"bg-yellow-100 text-yellow-800\",\n inactive: \"bg-gray-100 text-gray-800\",\n disabled: \"bg-red-100 text-red-800\",\n past_due: \"bg-gray-100 text-gray-800\",\n};\n\nconst STATUS_DOT_COLORS: Record<string, string> = {\n active: \"bg-green-500\",\n paused: \"bg-gray-400\",\n cancelled: \"bg-red-500\",\n pending: \"bg-yellow-500\",\n inactive: \"bg-gray-400\",\n disabled: \"bg-red-500\",\n past_due: \"bg-gray-400\",\n};\n\nexport interface StatusPillProps {\n status: string | undefined | null;\n children: React.ReactNode;\n}\n\nexport function StatusPill({ status, children }: StatusPillProps): JSX.Element {\n const key = status?.toLowerCase() ?? \"\";\n const pillColor = STATUS_COLORS[key] ?? \"bg-gray-100 text-gray-800\";\n const dotColor = STATUS_DOT_COLORS[key] ?? \"bg-gray-400\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium\",\n pillColor,\n )}\n >\n <span className={cn(\"h-1.5 w-1.5 rounded-full\", dotColor)} />\n {children}\n </span>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport type { subscriptions } from \"@fluid-app/subscriptions-core\";\nimport { useInfiniteSubscriptions } from \"@fluid-app/subscriptions-core\";\nimport { TableColumn } from \"@fluid-app/orders-ui\";\nimport { InfiniteScrollSentinel } from \"@fluid-app/ui-components/components/InfiniteScrollSentinel\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n ToggleGroup,\n ToggleGroupItem,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { formatCurrency, startCase, formatNextBillDate } from \"../lib/format\";\nimport { StatusPill } from \"./status-pill\";\n\nexport interface SubscriptionsListProps {\n customerId: number | undefined;\n onSubscriptionClick: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function SubscriptionsList({\n customerId,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: SubscriptionsListProps): JSX.Element {\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n const [search, setSearch] = useState<string | null>(null);\n const [sortBy, setSortBy] = useState<{\n column: string;\n direction: \"asc\" | \"desc\";\n }>({\n column: \"next_bill_date\",\n direction: \"desc\",\n });\n\n const params = {\n customerId: customerId ?? 0,\n perPage: pageSize,\n status: statusFilter,\n search,\n sortBy: sortBy.column,\n sortDirection: sortBy.direction,\n };\n\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =\n useInfiniteSubscriptions(params, { enabled: !!customerId });\n\n const items = data?.pages.flatMap((p) => p.subscriptions) ?? [];\n\n const handleSubscriptionClick = (token: string) => {\n if (token) {\n onSubscriptionClick(token);\n }\n };\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n {/* header: filter tabs + search */}\n <div className=\"flex flex-col gap-2 p-3 sm:flex-row sm:items-center sm:justify-between\">\n <ToggleGroup\n type=\"single\"\n value={statusFilter ?? \"all\"}\n onValueChange={(v) => {\n if (v) setStatusFilter(v === \"all\" ? null : v);\n }}\n variant=\"ghost\"\n >\n <ToggleGroupItem value=\"all\">{t(\"all\")}</ToggleGroupItem>\n <ToggleGroupItem value=\"active\">{t(\"active\")}</ToggleGroupItem>\n <ToggleGroupItem value=\"inactive\">{t(\"inactive\")}</ToggleGroupItem>\n </ToggleGroup>\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={search ?? \"\"}\n onSearchChange={(v) => setSearch(v || null)}\n placeholder=\"Search subscriptions\"\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : items.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {t(\"no_subscriptions_found\")}\n </div>\n ) : (\n items.map((subscription) => (\n <div\n key={subscription.subscription_token}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() =>\n handleSubscriptionClick(subscription.subscription_token)\n }\n >\n <div className=\"flex items-start space-x-3\">\n <img\n src={subscription.variant?.product?.image_url}\n alt={subscription.variant?.product?.title}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n <div className=\"w-0 min-w-0 flex-1\">\n <p className=\"text-foreground truncate text-sm font-medium\">\n {subscription.variant?.product?.title}\n </p>\n <div className=\"mt-2 grid grid-cols-2 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"next_bill_date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {formatNextBillDate(subscription.next_bill_date ?? \"\")}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"price\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatCurrency(\n subscription.price * subscription.quantity,\n )}\n </span>\n </div>\n </div>\n <div className=\"mt-2\">\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"status\")}\n </span>\n <StatusPill status={subscription.status}>\n {startCase(subscription.status) || t(\"unknown_status\")}\n </StatusPill>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-[45%] min-w-[240px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[15%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn\n label={t(\"next_bill_date\")}\n sortBy=\"next_bill_date\"\n sortData={sortBy}\n onSortClick={(value: string) =>\n setSortBy({\n column: value,\n direction: sortBy.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n />\n <TableColumn label={t(\"price\")} sortable={false} />\n <TableColumn label={t(\"status\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-16\" />\n </TableCell>\n </TableRow>\n ))\n ) : items.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {t(\"no_subscriptions_found\")}\n </TableCell>\n </TableRow>\n ) : (\n items.map((subscription) => (\n <TableRow\n key={subscription.subscription_token}\n className=\"cursor-pointer\"\n onClick={() =>\n handleSubscriptionClick(subscription.subscription_token)\n }\n >\n <TableCell className=\"text-muted-foreground flex max-w-[280px] items-center space-x-3 py-4 pr-3 pl-3 text-sm\">\n <img\n src={subscription.variant?.product?.image_url}\n alt={subscription.variant?.product?.title}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n <span className=\"text-foreground truncate text-sm font-medium\">\n {subscription.variant?.product?.title}\n </span>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatNextBillDate(subscription.next_bill_date ?? \"\")}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm whitespace-nowrap\">\n <span className=\"text-muted-foreground\">\n {formatCurrency(\n subscription.price * subscription.quantity,\n )}\n </span>\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm whitespace-nowrap\">\n <StatusPill status={subscription.status}>\n {startCase(subscription.status) || t(\"unknown_status\")}\n </StatusPill>\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <InfiniteScrollSentinel\n onLoadMore={fetchNextPage}\n hasMore={!!hasNextPage}\n isLoading={isFetchingNextPage}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbPage,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { SubscriptionsList } from \"../components/subscriptions-list\";\n\nexport interface SubscriptionsListScreenProps {\n customerId: number | undefined;\n onSubscriptionClick: (subscriptionToken: string) => void;\n t: (key: string) => string;\n isLoadingCustomer?: boolean;\n}\n\nexport function SubscriptionsListScreen({\n customerId,\n onSubscriptionClick,\n t,\n isLoadingCustomer,\n}: SubscriptionsListScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n Subscriptions\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n if (isLoadingCustomer) {\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <div className=\"space-y-3\">\n <div className=\"bg-muted h-10 animate-pulse rounded\" />\n <div className=\"bg-muted h-64 animate-pulse rounded\" />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <SubscriptionsList\n customerId={customerId}\n onSubscriptionClick={onSubscriptionClick}\n t={t}\n />\n </div>\n );\n}\n","import { SubscriptionsListScreen as SubscriptionsListScreenContent } from \"@fluid-app/subscriptions-ui/screens/SubscriptionsListScreen\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\nconst translations: Record<string, string> = {\n all: \"All\",\n active: \"Active\",\n inactive: \"Inactive\",\n search: \"Search\",\n subscriptions: \"Search subscriptions...\",\n product: \"Product\",\n next_bill_date: \"Next Bill Date\",\n price: \"Price\",\n status: \"Status\",\n no_subscriptions_found: \"No subscriptions found\",\n unknown_status: \"Unknown\",\n total: \"Total\",\n results: \"results\",\n previous: \"Previous\",\n next: \"Next\",\n pagination: \"Pagination\",\n};\n\ninterface SubscriptionsListScreenProps {\n customerId: number | undefined;\n isLoadingCustomer: boolean;\n}\n\nexport function SubscriptionsListScreen({\n customerId,\n isLoadingCustomer,\n}: SubscriptionsListScreenProps): React.JSX.Element {\n const { navigate } = useAppNavigation();\n\n return (\n <SubscriptionsListScreenContent\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n onSubscriptionClick={(subscriptionToken) =>\n navigate(`subscriptions/${subscriptionToken}`)\n }\n t={(key) => translations[key] ?? key}\n />\n );\n}\n","import { useEffect, useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@fluid-app/ui-primitives\";\n\nconst PAUSE_MONTH_OPTIONS = [1, 2, 3] as const;\nexport type PauseMonths = (typeof PAUSE_MONTH_OPTIONS)[number];\n\nexport interface CancelSubscriptionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: () => void | Promise<unknown>;\n onPauseInstead: (months: PauseMonths) => void;\n errorMessage?: string;\n title?: string;\n description?: string;\n pauseQuestion?: string;\n pauseButtonText?: string;\n cancelButtonText?: string;\n actionButtonText?: string;\n}\n\nexport function CancelSubscriptionDialog({\n open,\n onOpenChange,\n onConfirm,\n onPauseInstead,\n errorMessage,\n title = \"Cancel Subscription\",\n description = \"Are you sure you want to cancel this subscription? You can reactivate it later.\",\n pauseQuestion = \"Would you like to pause your subscription instead?\",\n pauseButtonText = \"Pause Subscription\",\n cancelButtonText = \"Cancel\",\n actionButtonText = \"Cancel Subscription\",\n}: CancelSubscriptionDialogProps) {\n const [isPending, setIsPending] = useState(false);\n const [selectedMonths, setSelectedMonths] = useState<PauseMonths | null>(\n null,\n );\n\n useEffect(() => {\n if (!open) setSelectedMonths(null);\n }, [open]);\n\n const handleConfirm = async () => {\n const result = onConfirm();\n if (!(result instanceof Promise)) {\n onOpenChange(false);\n return;\n }\n setIsPending(true);\n try {\n await result;\n onOpenChange(false);\n } catch (error) {\n // Leave the dialog open so the parent can surface errorMessage inline.\n console.error(\"CancelSubscriptionDialog: action rejected\", error);\n } finally {\n setIsPending(false);\n }\n };\n\n const handlePause = () => {\n if (!selectedMonths) return;\n onPauseInstead(selectedMonths);\n };\n\n return (\n <AlertDialog\n open={open}\n onOpenChange={(v) => !isPending && onOpenChange(v)}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n\n <div className=\"border-border space-y-2 rounded-md border p-3\">\n <p className=\"text-foreground text-sm font-medium\">{pauseQuestion}</p>\n <Label\n htmlFor=\"cancel-pause-months\"\n className=\"text-foreground text-sm font-semibold\"\n >\n Pause for\n </Label>\n <Select\n value={selectedMonths ? String(selectedMonths) : undefined}\n onValueChange={(value) =>\n setSelectedMonths(value ? (Number(value) as PauseMonths) : null)\n }\n disabled={isPending}\n >\n <SelectTrigger id=\"cancel-pause-months\" className=\"w-full\">\n <SelectValue placeholder=\"Select duration\" />\n </SelectTrigger>\n <SelectContent>\n {PAUSE_MONTH_OPTIONS.map((months) => (\n <SelectItem key={months} value={String(months)}>\n {months} {months === 1 ? \"month\" : \"months\"}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"outline\"\n onClick={handlePause}\n disabled={isPending || !selectedMonths}\n className=\"w-full\"\n >\n {pauseButtonText}\n </Button>\n </div>\n\n {errorMessage && (\n <p className=\"text-destructive text-left text-sm\">{errorMessage}</p>\n )}\n\n <AlertDialogFooter className=\"flex-col gap-2 sm:flex-row sm:justify-end\">\n <AlertDialogCancel disabled={isPending}>\n {cancelButtonText}\n </AlertDialogCancel>\n {/*\n Plain Button rather than AlertDialogAction: Action auto-closes\n the dialog after onClick, which races handleConfirm's async\n path — the dialog would dismiss before the mutation settled,\n the spinner would never show, and an inline errorMessage would\n never be visible. handleConfirm calls onOpenChange itself on\n success and intentionally leaves the dialog open on rejection.\n */}\n <Button\n variant=\"destructive\"\n onClick={handleConfirm}\n disabled={isPending}\n autoFocus\n >\n {isPending ? \"...\" : actionButtonText}\n </Button>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { calculateResumeDate } from \"@fluid-app/subscriptions-core\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Label,\n} from \"@fluid-app/ui-primitives\";\nimport { format } from \"date-fns\";\n\ntype PauseType = \"indefinite\" | \"order_count\";\n\nexport type PauseSubscriptionSelection =\n | { type: \"indefinite\" }\n | { type: \"order_count\"; numberOfOrders: number };\n\nexport interface PauseSubscriptionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (selection: PauseSubscriptionSelection) => void;\n isLoading?: boolean;\n errorMessage?: string;\n currentNextBillDate?: string | null;\n billingInterval?: number;\n billingIntervalUnit?: string;\n title?: string;\n description?: string;\n actionText?: string;\n}\n\nexport function PauseSubscriptionDialog({\n open,\n onOpenChange,\n onConfirm,\n isLoading,\n errorMessage,\n currentNextBillDate,\n billingInterval = 1,\n billingIntervalUnit = \"month\",\n title = \"Pause subscription\",\n description = \"Are you sure you want to pause subscription?\",\n actionText = \"Pause\",\n}: PauseSubscriptionDialogProps) {\n const [pauseType, setPauseType] = useState<PauseType>(\"indefinite\");\n const [selectedOrderCount, setSelectedOrderCount] = useState<number | null>(\n null,\n );\n\n const orderCountOptions = Array.from({ length: 99 }, (_, i) => i + 1);\n\n const calculatedResumeDate =\n selectedOrderCount && currentNextBillDate\n ? calculateResumeDate(\n billingInterval,\n billingIntervalUnit,\n selectedOrderCount,\n currentNextBillDate,\n )\n : null;\n\n // Reset selections whenever the dialog opens so stale state doesn't\n // leak across invocations.\n useEffect(() => {\n if (!open) return;\n setPauseType(\"indefinite\");\n setSelectedOrderCount(null);\n }, [open]);\n\n const handleConfirm = () => {\n if (pauseType === \"indefinite\") {\n onConfirm({ type: \"indefinite\" });\n return;\n }\n if (pauseType === \"order_count\" && selectedOrderCount) {\n onConfirm({\n type: \"order_count\",\n numberOfOrders: selectedOrderCount,\n });\n }\n };\n\n const handleDismiss = (next: boolean) => {\n if (!next) {\n setPauseType(\"indefinite\");\n setSelectedOrderCount(null);\n }\n onOpenChange(next);\n };\n\n const statusMessage = (() => {\n if (pauseType === \"indefinite\") {\n return (\n <>\n If you pause indefinitely no further charges will occur. To restart,\n simply select <strong>Resume</strong> from your account.\n </>\n );\n }\n if (!selectedOrderCount) return null;\n const displayDate = calculatedResumeDate\n ? format(calculatedResumeDate, \"MMMM d, yyyy\")\n : \"a future date\";\n return (\n <>\n You won&apos;t be charged until your subscription resumes on{\" \"}\n <span className=\"font-semibold\">{displayDate}</span>.\n </>\n );\n })();\n\n const isActionDisabled = pauseType === \"order_count\" && !selectedOrderCount;\n\n return (\n <Dialog open={open} onOpenChange={handleDismiss}>\n <DialogContent\n aria-describedby=\"pause-subscription-dialog-description\"\n className=\"rounded\"\n >\n <DialogHeader className=\"flex flex-row justify-between\">\n <DialogTitle className=\"text-md w-full text-left font-medium\">\n {title}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <p\n id=\"pause-subscription-dialog-description\"\n className=\"text-muted-foreground text-sm\"\n >\n {description}\n </p>\n\n <div className=\"space-y-4\">\n {/* Pause Indefinitely */}\n <div className=\"flex items-center space-x-2\">\n <input\n id=\"pause-indefinitely\"\n type=\"radio\"\n checked={pauseType === \"indefinite\"}\n onChange={() => setPauseType(\"indefinite\")}\n className=\"border-border accent-primary h-4 w-4 focus:ring-0\"\n />\n <Label\n htmlFor=\"pause-indefinitely\"\n className=\"text-foreground cursor-pointer text-sm font-medium\"\n >\n Pause indefinitely\n </Label>\n </div>\n\n {/* Pause for Number of Orders */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n id=\"pause-order-count\"\n type=\"radio\"\n checked={pauseType === \"order_count\"}\n onChange={() => setPauseType(\"order_count\")}\n className=\"border-border accent-primary h-4 w-4 focus:ring-0\"\n />\n <Label\n htmlFor=\"pause-order-count\"\n className=\"text-foreground cursor-pointer text-sm font-medium\"\n >\n Pause for a number of upcoming orders\n </Label>\n </div>\n\n {pauseType === \"order_count\" && (\n <div className=\"ml-6 space-y-2\">\n <Label className=\"text-foreground text-sm font-semibold\">\n Choose how many orders to skip\n </Label>\n <select\n value={selectedOrderCount ?? \"\"}\n onChange={(e) =>\n setSelectedOrderCount(Number(e.target.value))\n }\n className=\"border-input bg-background focus:border-ring focus:ring-ring h-10 w-full rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-hidden\"\n >\n <option value=\"\" disabled>\n Select\n </option>\n {orderCountOptions.map((count) => (\n <option key={count} value={count}>\n {count}\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n {/* Status Message */}\n {statusMessage && (\n <div className=\"text-muted-foreground text-xs\">\n {statusMessage}\n </div>\n )}\n </div>\n </div>\n\n {errorMessage && (\n <p className=\"text-destructive text-left text-sm\">{errorMessage}</p>\n )}\n\n <DialogFooter>\n <div className=\"flex w-full flex-row justify-between space-x-2\">\n <Button\n variant=\"outline\"\n className=\"h-10 min-w-[70px] rounded p-3\"\n onClick={() => handleDismiss(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n className=\"h-10 min-w-[70px] rounded p-3\"\n onClick={handleConfirm}\n disabled={isActionDisabled || isLoading}\n >\n {isLoading ? (\n <div className=\"border-primary-foreground h-5 w-5 animate-spin rounded-full border-4 border-t-4 border-t-transparent\" />\n ) : (\n actionText\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { parse } from \"date-fns\";\n\nconst ISO_DATE = \"yyyy-MM-dd\";\n\n/**\n * Parse an ISO date string as local midnight. Accepts either a bare\n * \"yyyy-MM-dd\" or a full ISO timestamp — both are sliced to the date\n * portion first so the result lands on the intended calendar day\n * regardless of the viewer's timezone.\n */\nexport function parseIsoDate(value: string): Date {\n return parse(value.slice(0, 10), ISO_DATE, new Date());\n}\n","import { useEffect, useState } from \"react\";\nimport {\n Button,\n Calendar,\n cn,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@fluid-app/ui-primitives\";\nimport { addDays, format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { parseIsoDate } from \"../lib/parse-iso-date\";\n\nexport interface ResumeSubscriptionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (nextBillDate: string) => void;\n isLoading?: boolean;\n errorMessage?: string;\n /** Seeds the calendar; must be in the future. Defaults to tomorrow. */\n defaultNextBillDate?: string | null;\n title?: string;\n description?: string;\n actionText?: string;\n}\n\nexport function ResumeSubscriptionDialog({\n open,\n onOpenChange,\n onConfirm,\n isLoading,\n errorMessage,\n defaultNextBillDate,\n title = \"Resume subscription\",\n description = \"Choose the date your subscription should resume.\",\n actionText = \"Resume\",\n}: ResumeSubscriptionDialogProps) {\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined);\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const minDate = addDays(today, 1);\n\n // Seed selected date when the dialog opens.\n useEffect(() => {\n if (!open) return;\n if (defaultNextBillDate) {\n const seeded = parseIsoDate(defaultNextBillDate);\n setSelectedDate(seeded < minDate ? minDate : seeded);\n } else {\n setSelectedDate(minDate);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, defaultNextBillDate]);\n\n const handleConfirm = () => {\n if (!selectedDate) return;\n onConfirm(format(selectedDate, \"yyyy-MM-dd\"));\n };\n\n const handleDismiss = (next: boolean) => {\n if (!next) setSelectedDate(undefined);\n onOpenChange(next);\n };\n\n return (\n <Dialog open={open} onOpenChange={handleDismiss}>\n <DialogContent\n aria-describedby=\"resume-subscription-dialog-description\"\n className=\"rounded\"\n >\n <DialogHeader className=\"flex flex-row justify-between\">\n <DialogTitle className=\"text-md w-full text-left font-medium\">\n {title}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <p\n id=\"resume-subscription-dialog-description\"\n className=\"text-muted-foreground text-left text-sm\"\n >\n {description}\n </p>\n\n <div className=\"space-y-2\">\n <Label className=\"text-foreground text-sm font-semibold\">\n Resume date\n </Label>\n <Popover open={calendarOpen} onOpenChange={setCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground h-9 w-full justify-start border px-3 py-2 text-left font-normal\",\n !selectedDate &&\n \"text-muted-foreground hover:text-muted-foreground\",\n )}\n >\n {selectedDate ? (\n format(selectedDate, \"MM/dd/yyyy\")\n ) : (\n <span>mm/dd/yyyy</span>\n )}\n <CalendarIcon className=\"text-muted-foreground ml-auto h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"bg-popover w-auto rounded-md border p-0 shadow-lg\"\n align=\"start\"\n sideOffset={4}\n style={{ zIndex: 9999 }}\n >\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n setSelectedDate(date);\n setCalendarOpen(false);\n }}\n disabled={(date) => date < minDate}\n defaultMonth={selectedDate}\n modifiersStyles={{\n selected: {\n backgroundColor: \"var(--primary)\",\n color: \"var(--primary-foreground)\",\n },\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n {selectedDate && (\n <p className=\"text-muted-foreground text-xs\">\n Your subscription will resume and you&apos;ll be charged on{\" \"}\n <span className=\"font-semibold\">\n {format(selectedDate, \"MMMM d, yyyy\")}\n </span>\n .\n </p>\n )}\n </div>\n </div>\n\n {errorMessage && (\n <p className=\"text-destructive text-left text-sm\">{errorMessage}</p>\n )}\n\n <DialogFooter>\n <div className=\"flex w-full flex-row justify-between space-x-2\">\n <Button\n className=\"bg-muted text-foreground ring-border hover:bg-muted/80 h-10 min-w-[70px] rounded p-3 ring-1\"\n onClick={() => handleDismiss(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n className=\"bg-primary text-primary-foreground h-10 min-w-[70px] rounded p-3 hover:opacity-90 disabled:opacity-50\"\n onClick={handleConfirm}\n disabled={!selectedDate || isLoading}\n >\n {isLoading ? (\n <div className=\"border-primary-foreground h-5 w-5 animate-spin rounded-full border-4 border-t-4 border-t-transparent\" />\n ) : (\n actionText\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n Button,\n Calendar,\n cn,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@fluid-app/ui-primitives\";\nimport {\n addDays,\n addMonths,\n addWeeks,\n addYears,\n format,\n isAfter,\n} from \"date-fns\";\nimport { CalendarIcon, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { parseIsoDate } from \"../lib/parse-iso-date\";\n\nexport interface OtherSubscriptionForBillDate {\n token: string;\n productTitle: string;\n nextBillDate: string | null;\n billingInterval: number;\n billingIntervalUnit: string;\n}\n\nfunction advanceByInterval(date: Date, interval: number, unit: string): Date {\n const step = Math.max(1, interval);\n switch (unit.toLowerCase()) {\n case \"day\":\n return addDays(date, step);\n case \"week\":\n return addWeeks(date, step);\n case \"year\":\n return addYears(date, step);\n case \"month\":\n default:\n return addMonths(date, step);\n }\n}\n\nconst SUBSCRIPTION_COLORS = [\n \"#3b82f6\",\n \"#f97316\",\n \"#10b981\",\n \"#a855f7\",\n \"#ec4899\",\n \"#eab308\",\n \"#14b8a6\",\n \"#ef4444\",\n \"#0ea5e9\",\n \"#84cc16\",\n];\n\n// Cap projection iterations per subscription so a daily-interval row can't\n// run away tens of thousands of times across the 2-year horizon. Sized for\n// a weekly cycle (~104 over two years) — covers the longest realistic\n// non-daily case without truncating dots for the rep.\nconst MAX_PROJECTIONS_PER_SUB = 104;\n\nexport interface EditBillDateDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (nextBillDate: string) => void;\n isLoading?: boolean;\n errorMessage?: string;\n currentNextBillDate?: string | null;\n otherSubscriptions?: OtherSubscriptionForBillDate[];\n onNavigateToSubscription?: (token: string) => void;\n title?: string;\n description?: string;\n actionText?: string;\n}\n\nexport function EditBillDateDialog({\n open,\n onOpenChange,\n onConfirm,\n isLoading,\n errorMessage,\n currentNextBillDate,\n otherSubscriptions,\n onNavigateToSubscription,\n title = \"Edit bill date\",\n description = \"Select a new date for your next bill.\",\n actionText = \"Save\",\n}: EditBillDateDialogProps) {\n const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined);\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const minDate = addDays(today, 1);\n\n const subscriptionsWithColor = useMemo(\n () =>\n (otherSubscriptions ?? []).map((sub, idx) => ({\n ...sub,\n color: SUBSCRIPTION_COLORS[idx % SUBSCRIPTION_COLORS.length] as string,\n })),\n [otherSubscriptions],\n );\n\n const billingColorsByDate = useMemo<Map<string, string[]>>(() => {\n const m = new Map<string, string[]>();\n const horizon = addYears(new Date(), 2);\n for (const sub of subscriptionsWithColor) {\n if (!sub.nextBillDate) continue;\n let d = parseIsoDate(sub.nextBillDate);\n let count = 0;\n while (!isAfter(d, horizon) && count < MAX_PROJECTIONS_PER_SUB) {\n const key = format(d, \"yyyy-MM-dd\");\n const arr = m.get(key) ?? [];\n arr.push(sub.color);\n m.set(key, arr);\n d = advanceByInterval(d, sub.billingInterval, sub.billingIntervalUnit);\n count++;\n }\n }\n return m;\n }, [subscriptionsWithColor]);\n\n // Memoize the components map: react-day-picker uses each entry's identity\n // as the React element type for every day cell, so a fresh object every\n // render unmounts/remounts all visible cells (visible flicker, lost cell\n // state).\n const calendarComponents = useMemo(\n () => ({\n DayContent: ({ date }: { date: Date }) => {\n const key = format(date, \"yyyy-MM-dd\");\n const colors = billingColorsByDate.get(key) ?? [];\n return (\n <div className=\"flex h-full w-full flex-col items-center justify-center\">\n <span className=\"leading-none\">{date.getDate()}</span>\n {colors.length > 0 && (\n <div className=\"mt-0.5 flex items-center justify-center gap-0.5\">\n {colors.map((c, i) => (\n <span\n key={`${key}-${i}`}\n className=\"h-1 w-1 rounded-[1px]\"\n style={{ backgroundColor: c }}\n />\n ))}\n </div>\n )}\n </div>\n );\n },\n IconLeft: ({\n className: iconClassName,\n ...iconProps\n }: React.ComponentProps<typeof ChevronLeft>) => (\n <ChevronLeft className={cn(\"h-4 w-4\", iconClassName)} {...iconProps} />\n ),\n IconRight: ({\n className: iconClassName,\n ...iconProps\n }: React.ComponentProps<typeof ChevronRight>) => (\n <ChevronRight className={cn(\"h-4 w-4\", iconClassName)} {...iconProps} />\n ),\n }),\n [billingColorsByDate],\n );\n\n useEffect(() => {\n if (!open) return;\n if (currentNextBillDate) {\n const initial = parseIsoDate(currentNextBillDate);\n setSelectedDate(initial < minDate ? minDate : initial);\n } else {\n setSelectedDate(undefined);\n }\n // minDate derives from `new Date()` — intentionally excluded so this\n // only runs on open transitions.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, currentNextBillDate]);\n\n const handleConfirm = () => {\n if (!selectedDate) return;\n onConfirm(format(selectedDate, \"yyyy-MM-dd\"));\n };\n\n const handleDismiss = (next: boolean) => {\n if (!next) {\n setSelectedDate(undefined);\n }\n onOpenChange(next);\n };\n\n const previewDate = selectedDate\n ? format(selectedDate, \"MMMM d, yyyy\")\n : currentNextBillDate\n ? format(parseIsoDate(currentNextBillDate), \"MMMM d, yyyy\")\n : \"a future date\";\n\n return (\n <Dialog open={open} onOpenChange={handleDismiss}>\n <DialogContent\n aria-describedby=\"edit-bill-date-dialog-description\"\n className=\"rounded\"\n >\n <DialogHeader className=\"flex flex-row justify-between\">\n <DialogTitle className=\"text-md w-full text-left font-medium\">\n {title}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <p\n id=\"edit-bill-date-dialog-description\"\n className=\"text-muted-foreground text-sm\"\n >\n {description}\n </p>\n\n <div className=\"space-y-2\">\n <Label className=\"text-foreground text-sm font-semibold\">\n Next bill date\n </Label>\n <Popover open={calendarOpen} onOpenChange={setCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground h-9 w-full justify-start border px-3 py-2 text-left font-normal\",\n !selectedDate &&\n \"text-muted-foreground hover:text-muted-foreground\",\n )}\n >\n {selectedDate ? (\n format(selectedDate, \"MM/dd/yyyy\")\n ) : (\n <span>mm/dd/yyyy</span>\n )}\n <CalendarIcon className=\"text-muted-foreground ml-auto h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"bg-popover z-[9999] w-auto rounded-md border p-0 shadow-lg\"\n align=\"start\"\n sideOffset={4}\n >\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n setSelectedDate(date);\n setCalendarOpen(false);\n }}\n disabled={(date) => date < minDate}\n defaultMonth={\n selectedDate ??\n (currentNextBillDate\n ? parseIsoDate(currentNextBillDate)\n : undefined)\n }\n components={calendarComponents}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n </div>\n\n {selectedDate && (\n <div className=\"text-muted-foreground text-xs\">\n Your next bill will be on{\" \"}\n <span className=\"font-semibold\">{previewDate}</span>.\n </div>\n )}\n\n {subscriptionsWithColor.length > 0 && (\n <div className=\"space-y-2\">\n <Label className=\"text-foreground text-sm font-semibold\">\n Your other subscriptions\n </Label>\n <div className=\"border-border max-h-40 overflow-auto rounded-md border\">\n <table className=\"w-full table-fixed text-sm\">\n <thead className=\"bg-muted text-muted-foreground sticky top-0\">\n <tr>\n <th className=\"w-6 px-2 py-2\" aria-label=\"Color\" />\n <th className=\"px-3 py-2 text-left font-medium\">\n Product\n </th>\n <th className=\"w-28 px-3 py-2 text-left font-medium\">\n Bill Date\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-border divide-y\">\n {subscriptionsWithColor.map((sub) => (\n <tr key={sub.token}>\n <td className=\"px-2 py-2\">\n <span\n aria-hidden\n className=\"inline-block h-2.5 w-2.5 rounded-full\"\n style={{ backgroundColor: sub.color }}\n />\n </td>\n <td\n className=\"overflow-hidden px-3 py-2\"\n title={sub.productTitle}\n >\n {onNavigateToSubscription ? (\n <button\n type=\"button\"\n onClick={() => {\n onNavigateToSubscription(sub.token);\n handleDismiss(false);\n }}\n className=\"text-primary block w-full truncate text-left hover:underline\"\n >\n {sub.productTitle}\n </button>\n ) : (\n <span className=\"text-foreground block truncate\">\n {sub.productTitle}\n </span>\n )}\n </td>\n <td className=\"text-muted-foreground px-3 py-2 whitespace-nowrap\">\n {sub.nextBillDate\n ? format(\n parseIsoDate(sub.nextBillDate),\n \"MMM d, yyyy\",\n )\n : \"—\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n </div>\n\n {errorMessage && (\n <p className=\"text-destructive text-left text-sm\">{errorMessage}</p>\n )}\n\n <DialogFooter>\n <div className=\"flex w-full flex-row justify-between space-x-2\">\n <Button\n variant=\"outline\"\n className=\"h-10 min-w-[70px] rounded p-3\"\n onClick={() => handleDismiss(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n className=\"h-10 min-w-[70px] rounded p-3\"\n onClick={handleConfirm}\n disabled={!selectedDate || isLoading}\n >\n {isLoading ? (\n <div className=\"border-primary-foreground h-5 w-5 animate-spin rounded-full border-4 border-t-4 border-t-transparent\" />\n ) : (\n actionText\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import {\n useState,\n useEffect,\n useMemo,\n useRef,\n useCallback,\n type JSX,\n} from \"react\";\nimport type { subscriptions } from \"@fluid-app/subscriptions-core\";\nimport {\n useSubscription,\n useSubscriptions,\n usePauseSubscription,\n useResumeSubscription,\n useSkipSubscription,\n useCancelSubscription,\n useReactivateSubscription,\n useUpdateSubscriptionInfo,\n formatSubscriptionFrequency,\n formatDate,\n getNextBillDisplay,\n calculateNextBillDate,\n} from \"@fluid-app/subscriptions-core\";\nimport {\n SkipForward,\n Pause,\n Play,\n XCircle,\n RotateCcw,\n CalendarDays,\n} from \"lucide-react\";\nimport { addMonths, format } from \"date-fns\";\nimport { Skeleton, Button, Input, cn } from \"@fluid-app/ui-primitives\";\nimport {\n CancelSubscriptionDialog,\n type PauseMonths,\n} from \"./cancel-subscription-dialog\";\nimport {\n PauseSubscriptionDialog,\n type PauseSubscriptionSelection,\n} from \"./pause-subscription-dialog\";\nimport { ResumeSubscriptionDialog } from \"./resume-subscription-dialog\";\nimport { EditBillDateDialog } from \"./edit-bill-date-dialog\";\nimport { StatusPill } from \"./status-pill\";\nimport { startCase, formatCurrency } from \"../lib/format\";\n\nexport interface PaymentMethodSlotContext {\n paymentMethod: subscriptions.SubscriptionDetailPaymentMethod;\n subscriptionToken: string;\n customerId: number;\n countryCode: string;\n}\n\nexport interface ShippingAddressSlotContext {\n address: subscriptions.SubscriptionDetailAddress | null;\n subscriptionToken: string;\n customerId: number;\n countryCode: string;\n}\n\nexport interface SubscriptionDetailProps {\n token: string;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n onSuccess?: (message: string) => void;\n onMutationError?: (message: string, error: unknown) => void;\n /**\n * Called when the Edit Bill Date dialog wants to navigate the host app to\n * another subscription's detail page (clicking a row in the calendar's\n * \"Your other subscriptions\" list).\n */\n onNavigateToSubscription?: (token: string) => void;\n /**\n * Optional render-prop for the Payment Method block. When provided, replaces\n * the read-only display so consumers can wire change/add UX. Default falls\n * back to a read-only summary.\n */\n renderPaymentMethod?: (ctx: PaymentMethodSlotContext) => JSX.Element;\n /**\n * Optional render-prop for the Shipping Address block. When provided,\n * replaces the read-only display so consumers can wire change/add UX.\n * Default falls back to a read-only summary.\n */\n renderShippingAddress?: (ctx: ShippingAddressSlotContext) => JSX.Element;\n}\n\nfunction SubscriptionDetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n {/* Left: items skeleton */}\n <div className=\"bg-muted flex flex-col items-center px-8 lg:col-span-4\">\n <div className=\"w-full max-w-lg py-6\">\n <Skeleton className=\"mb-4 h-6 w-48\" />\n <div className=\"grid grid-cols-2 gap-4\">\n <Skeleton className=\"h-16 w-full rounded\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n <div className=\"mt-6 flex items-center space-x-4\">\n <Skeleton className=\"h-24 w-24 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n <Skeleton className=\"h-4 w-1/4\" />\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\n {/* Right: management skeleton */}\n <div className=\"bg-background col-span-4 px-8 pt-4\">\n <div className=\"mx-auto max-w-lg\">\n <Skeleton className=\"mb-3 h-5 w-32\" />\n <div className=\"grid grid-cols-2 gap-3\">\n <Skeleton className=\"h-10 w-full rounded\" />\n <Skeleton className=\"h-10 w-full rounded\" />\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <div className=\"flex gap-4\">\n <Skeleton className=\"h-12 flex-1 rounded\" />\n <Skeleton className=\"h-12 flex-1 rounded\" />\n </div>\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Left column: product & order summary ──────────────────────────── */\n\nfunction SubscriptionItemsSection({\n subscription,\n displayQuantity,\n displayNextBillDate,\n canEditQuantity = false,\n onQuantityChange,\n isUpdatingQuantity = false,\n}: {\n subscription: subscriptions.SubscriptionDetailSubscription;\n displayQuantity?: number;\n displayNextBillDate?: string;\n canEditQuantity?: boolean;\n onQuantityChange?: (next: number) => void;\n isUpdatingQuantity?: boolean;\n}) {\n const variant = subscription.variant;\n const product = variant?.product;\n const quantity = displayQuantity ?? subscription.quantity;\n const totalPrice = formatCurrency(subscription.price * quantity);\n const quantityInputId = `subscription-${subscription.subscription_token}-quantity`;\n const discount =\n subscription.original_price != null\n ? subscription.original_price - subscription.price\n : 0;\n const subtotal =\n discount > 0\n ? formatCurrency(subscription.original_price * quantity)\n : totalPrice;\n\n return (\n <section className=\"bg-muted flex w-full flex-col items-center rounded-lg px-8 lg:col-span-4 lg:self-start\">\n <div className=\"flex w-full max-w-lg flex-col\">\n {/* Upcoming order summary */}\n <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Your Upcoming Order\n </h2>\n <div className=\"text-muted-foreground\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"border-border border-r pr-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Next Order Date\n </div>\n <div className=\"text-foreground text-2xl font-bold\">\n {getNextBillDisplay(\n displayNextBillDate\n ? { ...subscription, next_bill_date: displayNextBillDate }\n : subscription,\n )}\n </div>\n </div>\n <div className=\"pl-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Next Bill Amount\n </div>\n <div className=\"text-foreground text-2xl font-bold\">\n {formatCurrency(subscription.price * quantity)}\n </div>\n {(displayNextBillDate ?? subscription.next_bill_date) && (\n <div className=\"text-muted-foreground mt-1 text-xs\">\n {formatDate(\n displayNextBillDate ?? subscription.next_bill_date ?? \"\",\n )}\n </div>\n )}\n </div>\n </div>\n <hr className=\"border-border mt-4\" />\n </div>\n </div>\n\n {/* Product row */}\n <div className=\"py-6\">\n <div className=\"flex flex-row items-center space-x-4\">\n <div className=\"flex min-w-0 flex-1 flex-row space-x-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted h-24 w-24 overflow-hidden rounded\">\n {product?.image_url ? (\n <img\n src={product.image_url}\n alt={variant?.title || \"Product image\"}\n width={96}\n height={96}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"text-muted-foreground flex h-full w-full items-center justify-center\">\n No image\n </div>\n )}\n {quantity > 1 && (\n <span className=\"bg-foreground text-background absolute -top-2 -right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium\">\n {quantity}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex min-w-0 flex-col space-y-0.5\">\n <p\n className=\"text-foreground truncate text-sm font-medium\"\n title={product?.title}\n >\n {product?.title}\n </p>\n {variant?.title && product?.title && (\n <p className=\"text-muted-foreground text-sm\">\n {variant.title}\n </p>\n )}\n <div>\n <p className=\"text-foreground text-sm font-medium\">\n {formatCurrency(subscription.price * quantity)}\n </p>\n </div>\n </div>\n </div>\n {canEditQuantity && onQuantityChange && (\n <div className=\"flex shrink-0 flex-col items-center\">\n <label\n htmlFor={quantityInputId}\n className=\"text-muted-foreground mb-1 text-xs\"\n >\n Quantity\n </label>\n <Input\n id={quantityInputId}\n type=\"number\"\n min={1}\n step={1}\n value={quantity || \"\"}\n onChange={(e) => {\n if (!e.target.value) return;\n const next = parseInt(e.target.value, 10);\n if (Number.isFinite(next) && next > 0)\n onQuantityChange(next);\n }}\n disabled={isUpdatingQuantity}\n className={cn(\n \"border-border bg-background h-10 w-16 border text-center\",\n isUpdatingQuantity && \"cursor-not-allowed opacity-50\",\n )}\n aria-label=\"Quantity\"\n />\n </div>\n )}\n </div>\n </div>\n\n {/* Pricing summary */}\n <div className=\"mb-4\">\n {discount > 0 && (\n <>\n <div className=\"flex justify-between text-sm\">\n <p className=\"text-muted-foreground text-sm font-medium\">\n Subtotal\n </p>\n <p className=\"text-muted-foreground text-sm font-medium\">\n {subtotal}\n </p>\n </div>\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground text-sm font-medium\">\n Discount\n </p>\n <p className=\"text-muted-foreground text-sm font-medium\">\n -{formatCurrency(discount * quantity)}\n </p>\n </div>\n </>\n )}\n <div className=\"mt-4 flex items-center justify-between text-base font-medium\">\n <p className=\"text-muted-foreground text-sm font-medium\">Total</p>\n <p className=\"text-foreground text-base font-bold\">\n {formatCurrency(subscription.price * quantity)}\n </p>\n </div>\n <span className=\"text-muted-foreground text-xs\">\n *Tax and shipping calculated at checkout\n </span>\n </div>\n </div>\n </section>\n );\n}\n\n/* ── Right column: actions & details ───────────────────────────────── */\n\nfunction SubscriptionManagementSection({\n subscription,\n isActive,\n isPaused,\n isCancelled,\n isMutating,\n onSkip,\n onPause,\n onResume,\n onCancel,\n onReactivate,\n onEditBillDate,\n displayNextBillDate,\n renderPaymentMethod,\n renderShippingAddress,\n}: {\n subscription: subscriptions.SubscriptionDetailSubscription;\n isActive: boolean;\n isPaused: boolean;\n isCancelled: boolean;\n isMutating: boolean;\n onSkip: () => void;\n onPause: () => void;\n onResume: () => void;\n onCancel: () => void;\n onReactivate: () => void;\n onEditBillDate: () => void;\n displayNextBillDate?: string;\n renderPaymentMethod?: (ctx: PaymentMethodSlotContext) => JSX.Element;\n renderShippingAddress?: (ctx: ShippingAddressSlotContext) => JSX.Element;\n}) {\n const plan = subscription.subscription_plan;\n const quantity = subscription.quantity;\n const totalPrice = formatCurrency(subscription.price * quantity);\n\n const paymentMethod = subscription.payment_method;\n const paymentDetails = paymentMethod?.details as {\n last4?: string;\n card_type?: string;\n logo_url?: string;\n } | null;\n\n const actionButtonClass =\n \"flex h-auto flex-row items-center justify-center gap-2 overflow-hidden border border-border bg-muted py-2 text-xs whitespace-nowrap text-foreground hover:bg-accent sm:text-sm\";\n\n return (\n <div className=\"bg-background col-span-4 flex-auto px-8 pt-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n {/* Action Buttons */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <h2 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n Order Actions\n </h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {isActive && plan.allow_skipping && (\n <Button\n variant=\"outline\"\n onClick={onSkip}\n disabled={isMutating || !subscription.next_bill_date}\n className={actionButtonClass}\n >\n <SkipForward className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Skip Next Order</span>\n </Button>\n )}\n {isActive && (\n <Button\n variant=\"outline\"\n onClick={onEditBillDate}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <CalendarDays className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Edit Bill Date</span>\n </Button>\n )}\n {isActive && (\n <Button\n variant=\"outline\"\n onClick={onPause}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <Pause className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Pause Subscription</span>\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={onCancel}\n disabled={isMutating || isCancelled}\n className={actionButtonClass}\n >\n <XCircle className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">\n {isCancelled ? \"Cancelled Subscription\" : \"Cancel Subscription\"}\n </span>\n </Button>\n {isPaused && (\n <Button\n variant=\"outline\"\n onClick={onResume}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <Play className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Resume Subscription</span>\n </Button>\n )}\n {isCancelled && (\n <Button\n variant=\"outline\"\n onClick={onReactivate}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <RotateCcw className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Reactivate Subscription</span>\n </Button>\n )}\n </div>\n </div>\n\n {/* Subscription Details */}\n <div className=\"border-border mb-4 border-b\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h3 className=\"text-foreground text-sm/6 font-semibold\">\n Subscription Details\n </h3>\n <StatusPill status={subscription.status}>\n {startCase(subscription.status)}\n </StatusPill>\n </div>\n <div className=\"divide-border mb-4 flex divide-x\">\n <div className=\"flex-1 pr-4\">\n <div className=\"text-muted-foreground text-sm\">\n Order Frequency\n </div>\n <div className=\"text-foreground font-medium\">\n {formatSubscriptionFrequency(plan.billing_interval_unit)}\n </div>\n </div>\n <div className=\"flex-1 px-4\">\n <div className=\"text-muted-foreground text-sm\">Next Payment</div>\n <div className=\"text-foreground font-medium\">{totalPrice}</div>\n {(displayNextBillDate ?? subscription.next_bill_date) && (\n <div className=\"text-muted-foreground text-xs\">\n {formatDate(\n displayNextBillDate ?? subscription.next_bill_date ?? \"\",\n )}\n </div>\n )}\n </div>\n {subscription.last_bill_date && (\n <div className=\"flex-1 pl-4 text-right\">\n <div className=\"text-muted-foreground text-sm\">Last Billed</div>\n <div className=\"text-foreground font-medium\">\n {formatDate(subscription.last_bill_date)}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Payment & Shipping */}\n <div className=\"pt-2\">\n <h3 className=\"text-foreground mb-4 text-sm/6 font-semibold\">\n Payment & Shipping\n </h3>\n <div className=\"flex flex-col\">\n {/* Shipping Address */}\n {renderShippingAddress\n ? renderShippingAddress({\n address: subscription.address ?? null,\n subscriptionToken: subscription.subscription_token,\n customerId: subscription.customer?.id ?? 0,\n countryCode: subscription.address?.country_code ?? \"US\",\n })\n : subscription.address && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mt-3 mb-1 text-sm\">\n Shipping Address\n </div>\n <div className=\"text-foreground text-sm\">\n <p className=\"font-medium\">{subscription.address.name}</p>\n <p>{subscription.address.address1}</p>\n {subscription.address.address2 && (\n <p>{subscription.address.address2}</p>\n )}\n <p>\n {[subscription.address.city, subscription.address.state]\n .filter(Boolean)\n .join(\", \")}{\" \"}\n {subscription.address.postal_code}\n </p>\n {subscription.address.country_code && (\n <p>{subscription.address.country_code}</p>\n )}\n </div>\n </div>\n )}\n\n {/* Payment Method */}\n {paymentMethod &&\n (renderPaymentMethod ? (\n renderPaymentMethod({\n paymentMethod,\n subscriptionToken: subscription.subscription_token,\n customerId: subscription.customer?.id ?? 0,\n countryCode: subscription.address?.country_code ?? \"US\",\n })\n ) : (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Payment Method\n </div>\n <div className=\"text-foreground flex items-center gap-2 text-sm\">\n {paymentDetails?.logo_url && (\n <img\n src={paymentDetails.logo_url}\n alt={paymentDetails.card_type ?? \"Card\"}\n className=\"h-6\"\n />\n )}\n <span className=\"font-medium\">\n {paymentDetails?.card_type\n ? startCase(paymentDetails.card_type)\n : paymentMethod.payment_type}\n {paymentDetails?.last4\n ? ` ending in ${paymentDetails.last4}`\n : \"\"}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Order history (own section, full-width below the grid) ────────── */\n\nfunction OrderHistorySection({\n subscription,\n}: {\n subscription: subscriptions.SubscriptionDetailSubscription;\n}) {\n if (subscription.orders.length === 0) return null;\n return (\n <section className=\"mt-6 px-8 pt-6 pb-8\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n Subscription Order History\n </h3>\n <div className=\"border-border overflow-x-auto rounded-md border\">\n <table className=\"divide-border min-w-full divide-y text-sm\">\n <thead className=\"bg-muted\">\n <tr>\n <th className=\"text-muted-foreground py-2 pr-3 pl-3 text-left font-medium\">\n Order\n </th>\n <th className=\"text-muted-foreground px-3 py-2 text-left font-medium\">\n Date\n </th>\n <th className=\"text-muted-foreground px-3 py-2 text-left font-medium\">\n Status\n </th>\n <th className=\"text-muted-foreground py-2 pr-3 pl-3 text-right font-medium\">\n Amount\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-border divide-y\">\n {subscription.orders.map((order) => (\n <tr key={order.id}>\n <td className=\"text-foreground py-2 pr-3 pl-3 font-medium\">\n {order.order_number ?? `#${order.id}`}\n </td>\n <td className=\"text-muted-foreground px-3 py-2\">\n {formatDate(order.created_at.split(\"T\")[0] ?? \"\")}\n </td>\n <td className=\"px-3 py-2\">\n <StatusPill status={order.status}>\n {startCase(order.status)}\n </StatusPill>\n </td>\n <td className=\"text-foreground py-2 pr-3 pl-3 text-right\">\n {order.amount != null\n ? formatCurrency(Number(order.amount))\n : \"N/A\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n );\n}\n\n/* ── Main component ────────────────────────────────────────────────── */\n\nexport function SubscriptionDetail({\n token,\n onNotFound,\n onError,\n onSuccess,\n onMutationError,\n onNavigateToSubscription,\n renderPaymentMethod,\n renderShippingAddress,\n}: SubscriptionDetailProps): JSX.Element | null {\n const [showCancelModal, setShowCancelModal] = useState(false);\n const [showPauseModal, setShowPauseModal] = useState(false);\n const [showResumeModal, setShowResumeModal] = useState(false);\n const [showEditBillDateModal, setShowEditBillDateModal] = useState(false);\n const [pendingNextBillDate, setPendingNextBillDate] = useState<string | null>(\n null,\n );\n\n const { data, isLoading, error } = useSubscription(token);\n const subscription = data?.subscription;\n const customerId = subscription?.customer?.id ?? 0;\n\n // Customer's other active subscriptions, only loaded once the bill-date\n // dialog opens — feeds the calendar's color-coded dots. The portal-tenant\n // BFF list endpoint scopes server-side to the member's own customer\n // record (PortalTenant::SubscriptionBrowser), so we don't pass customerId\n // — and we don't gate on it either, since the detail mapper hardcodes\n // customer.id to 0 today.\n //\n // Capped at 100 — a customer with more than 100 subscriptions will be\n // missing some dots from the calendar. Matches the practical ceiling of\n // every other \"list customer's subscriptions\" surface; if/when we have a\n // real-world customer past that, swap to cursor pagination here.\n const customerSubscriptionsQuery = useSubscriptions(\n { perPage: 100 },\n { enabled: showEditBillDateModal },\n );\n const otherSubscriptionsForBillDate = useMemo(\n () =>\n (customerSubscriptionsQuery.data?.subscriptions ?? [])\n .filter((s) => s.subscription_token !== token)\n .map((s) => ({\n token: s.subscription_token,\n productTitle: s.variant?.product?.title ?? \"Subscription\",\n nextBillDate: s.next_bill_date,\n billingInterval: s.subscription_plan?.billing_interval ?? 1,\n billingIntervalUnit:\n s.subscription_plan?.billing_interval_unit ?? \"month\",\n })),\n [customerSubscriptionsQuery.data, token],\n );\n\n const pauseMutation = usePauseSubscription({\n onSuccess: () => onSuccess?.(\"Subscription paused\"),\n onError: (err: unknown) =>\n onMutationError?.(\"Failed to pause subscription\", err),\n });\n\n const resumeMutation = useResumeSubscription({\n onSuccess: () => onSuccess?.(\"Subscription resumed\"),\n onError: (err: unknown) =>\n onMutationError?.(\"Failed to resume subscription\", err),\n });\n\n const skipMutation = useSkipSubscription({\n onSuccess: () => onSuccess?.(\"Next billing skipped\"),\n onError: (err: unknown) => onMutationError?.(\"Failed to skip billing\", err),\n });\n\n const cancelMutation = useCancelSubscription({\n onSuccess: () => {\n onSuccess?.(\"Subscription cancelled\");\n setShowCancelModal(false);\n },\n onError: (err: unknown) =>\n onMutationError?.(\"Failed to cancel subscription\", err),\n });\n\n const reactivateMutation = useReactivateSubscription({\n onSuccess: () => onSuccess?.(\"Subscription reactivated\"),\n onError: (err: unknown) =>\n onMutationError?.(\"Failed to reactivate subscription\", err),\n });\n\n const [pendingQuantity, setPendingQuantity] = useState<number | null>(null);\n const quantityDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n\n const quantityMutation = useUpdateSubscriptionInfo({\n onSuccess: () => {\n // Keep pendingQuantity set so the displayed amounts stay on the\n // new value while the invalidated query refetches. The effect\n // below clears it once the refetched subscription carries the\n // same quantity — avoids a flicker back to the old amounts.\n onSuccess?.(\"Quantity updated\");\n },\n onError: (err: unknown) => {\n setPendingQuantity(null);\n onMutationError?.(\"Failed to update quantity\", err);\n },\n });\n\n const editBillDateMutation = useUpdateSubscriptionInfo({\n onSuccess: () => {\n onSuccess?.(\"Bill date updated\");\n setShowEditBillDateModal(false);\n },\n onError: (err: unknown) => {\n setPendingNextBillDate(null);\n onMutationError?.(\"Failed to update bill date\", err);\n },\n });\n\n const serverNextBillDate = data?.subscription.next_bill_date ?? null;\n useEffect(() => {\n if (\n pendingNextBillDate != null &&\n serverNextBillDate != null &&\n serverNextBillDate.startsWith(pendingNextBillDate)\n ) {\n setPendingNextBillDate(null);\n }\n }, [pendingNextBillDate, serverNextBillDate]);\n\n const serverQuantity = data?.subscription.quantity;\n useEffect(() => {\n if (pendingQuantity != null && serverQuantity === pendingQuantity) {\n setPendingQuantity(null);\n }\n }, [pendingQuantity, serverQuantity]);\n\n useEffect(\n () => () => {\n if (quantityDebounceRef.current)\n clearTimeout(quantityDebounceRef.current);\n },\n [],\n );\n\n const quantityMutate = quantityMutation.mutate;\n const handleQuantityChange = useCallback(\n (next: number) => {\n const clamped = Math.max(1, next);\n setPendingQuantity(clamped);\n if (quantityDebounceRef.current)\n clearTimeout(quantityDebounceRef.current);\n quantityDebounceRef.current = setTimeout(() => {\n const current = data?.subscription.quantity;\n if (clamped === current) {\n setPendingQuantity(null);\n return;\n }\n quantityMutate({\n subscriptionToken: token,\n body: { quantity: clamped },\n });\n }, 500);\n },\n [data?.subscription.quantity, quantityMutate, token],\n );\n\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n const onNotFoundRef = useRef(onNotFound);\n onNotFoundRef.current = onNotFound;\n\n useEffect(() => {\n if (!isLoading && error) {\n onErrorRef.current?.(error as Error);\n }\n }, [isLoading, error]);\n\n useEffect(() => {\n if (!isLoading && !error && !subscription) {\n onNotFoundRef.current?.();\n }\n }, [isLoading, error, subscription]);\n\n if (isLoading) {\n return <SubscriptionDetailSkeleton />;\n }\n\n if (!subscription) {\n return null;\n }\n\n const plan = subscription.subscription_plan;\n const isActive = subscription.status === \"active\";\n const isPaused = subscription.status === \"paused\";\n const isCancelled = subscription.status === \"cancelled\";\n const isMutating =\n pauseMutation.isPending ||\n resumeMutation.isPending ||\n skipMutation.isPending ||\n cancelMutation.isPending ||\n reactivateMutation.isPending ||\n editBillDateMutation.isPending;\n\n const handlePauseConfirm = (selection: PauseSubscriptionSelection) => {\n const pauseParams: subscriptions.PauseSubscriptionParams = { customerId };\n if (selection.type === \"order_count\") {\n pauseParams.numberOfOrders = selection.numberOfOrders;\n }\n pauseMutation.mutate(\n { subscriptionToken: token, pauseParams },\n { onSuccess: () => setShowPauseModal(false) },\n );\n };\n\n const handleResumeConfirm = (nextBillDate: string) => {\n resumeMutation.mutate(\n {\n subscriptionToken: token,\n resumeParams: { customerId, nextBillDate },\n },\n { onSuccess: () => setShowResumeModal(false) },\n );\n };\n\n const handleSkip = () => {\n const nextBillDate = calculateNextBillDate(\n plan.billing_interval,\n plan.billing_interval_unit,\n );\n skipMutation.mutate({\n subscriptionToken: token,\n skipParams: { customerId, nextBillDate },\n });\n };\n\n const handleCancel = () => {\n cancelMutation.mutate({ subscriptionToken: token, customerId });\n };\n\n const handleReactivate = () => {\n reactivateMutation.mutate({\n subscriptionToken: token,\n reactivateParams: {},\n });\n };\n\n return (\n <>\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <SubscriptionItemsSection\n subscription={subscription}\n displayQuantity={pendingQuantity ?? undefined}\n displayNextBillDate={pendingNextBillDate ?? undefined}\n canEditQuantity={isActive}\n onQuantityChange={handleQuantityChange}\n isUpdatingQuantity={quantityMutation.isPending}\n />\n <SubscriptionManagementSection\n subscription={subscription}\n isActive={isActive}\n isPaused={isPaused}\n isCancelled={isCancelled}\n isMutating={isMutating}\n onSkip={handleSkip}\n onPause={() => setShowPauseModal(true)}\n onResume={() => setShowResumeModal(true)}\n onCancel={() => setShowCancelModal(true)}\n onReactivate={handleReactivate}\n onEditBillDate={() => setShowEditBillDateModal(true)}\n displayNextBillDate={pendingNextBillDate ?? undefined}\n renderPaymentMethod={renderPaymentMethod}\n renderShippingAddress={renderShippingAddress}\n />\n </div>\n <OrderHistorySection subscription={subscription} />\n <CancelSubscriptionDialog\n open={showCancelModal}\n onOpenChange={setShowCancelModal}\n onConfirm={handleCancel}\n onPauseInstead={(months: PauseMonths) => {\n setShowCancelModal(false);\n pauseMutation.mutate({\n subscriptionToken: token,\n pauseParams: {\n customerId,\n nextBillDate: format(addMonths(new Date(), months), \"yyyy-MM-dd\"),\n },\n });\n }}\n />\n <EditBillDateDialog\n open={showEditBillDateModal}\n onOpenChange={(next) => {\n if (!next) editBillDateMutation.reset();\n setShowEditBillDateModal(next);\n }}\n onConfirm={(nextBillDate) => {\n setPendingNextBillDate(nextBillDate);\n editBillDateMutation.mutate({\n subscriptionToken: token,\n body: { next_bill_date: nextBillDate },\n });\n }}\n isLoading={editBillDateMutation.isPending}\n errorMessage={\n editBillDateMutation.isError\n ? \"Could not update the bill date. Please try a different date.\"\n : undefined\n }\n currentNextBillDate={subscription.next_bill_date}\n otherSubscriptions={otherSubscriptionsForBillDate}\n onNavigateToSubscription={onNavigateToSubscription}\n />\n <PauseSubscriptionDialog\n open={showPauseModal}\n onOpenChange={(next) => {\n if (!next) pauseMutation.reset();\n setShowPauseModal(next);\n }}\n onConfirm={handlePauseConfirm}\n isLoading={pauseMutation.isPending}\n errorMessage={\n pauseMutation.isError\n ? \"Something went wrong. Please try again.\"\n : undefined\n }\n currentNextBillDate={subscription.next_bill_date}\n billingInterval={plan.billing_interval}\n billingIntervalUnit={plan.billing_interval_unit}\n />\n <ResumeSubscriptionDialog\n open={showResumeModal}\n onOpenChange={(next) => {\n if (!next) resumeMutation.reset();\n setShowResumeModal(next);\n }}\n onConfirm={handleResumeConfirm}\n isLoading={resumeMutation.isPending}\n errorMessage={\n resumeMutation.isError\n ? \"Something went wrong. Please try again.\"\n : undefined\n }\n defaultNextBillDate={calculateNextBillDate(\n plan.billing_interval,\n plan.billing_interval_unit,\n )}\n />\n </>\n );\n}\n\nexport interface SubscriptionActionsProps {\n isActive: boolean;\n isPaused: boolean;\n isCancelled: boolean;\n isMutating: boolean;\n allowSkipping: boolean | null;\n onPause: () => void;\n onResume: () => void;\n onSkip: () => void;\n onCancel: () => void;\n onReactivate: () => void;\n}\n\nexport function SubscriptionActions({\n isActive,\n isPaused,\n isCancelled,\n isMutating,\n allowSkipping,\n onPause,\n onResume,\n onSkip,\n onCancel,\n onReactivate,\n}: SubscriptionActionsProps) {\n const actionButtonClass =\n \"flex h-auto flex-row items-center justify-center gap-2 overflow-hidden border border-border bg-muted py-2 text-xs whitespace-nowrap text-foreground hover:bg-accent sm:text-sm\";\n\n return (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {isActive && (\n <>\n {allowSkipping && (\n <Button\n variant=\"outline\"\n onClick={onSkip}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <SkipForward className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Skip Next</span>\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={onPause}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <Pause className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Pause</span>\n </Button>\n <Button\n variant=\"outline\"\n onClick={onCancel}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <XCircle className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Cancel</span>\n </Button>\n </>\n )}\n {isPaused && (\n <>\n <Button\n variant=\"outline\"\n onClick={onResume}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <Play className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Resume</span>\n </Button>\n <Button\n variant=\"outline\"\n onClick={onCancel}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <XCircle className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Cancel</span>\n </Button>\n </>\n )}\n {isCancelled && (\n <Button\n variant=\"outline\"\n onClick={onReactivate}\n disabled={isMutating}\n className={actionButtonClass}\n >\n <RotateCcw className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">Reactivate</span>\n </Button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo, type JSX } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport {\n SubscriptionDetail,\n type PaymentMethodSlotContext,\n type ShippingAddressSlotContext,\n} from \"../components/subscription-detail\";\n\nexport interface SubscriptionDetailScreenProps {\n token: string;\n onNavigateToList: () => void;\n onNavigateToSubscription?: (token: string) => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n onSuccess?: (message: string) => void;\n onMutationError?: (message: string, error: unknown) => void;\n renderPaymentMethod?: (ctx: PaymentMethodSlotContext) => JSX.Element;\n renderShippingAddress?: (ctx: ShippingAddressSlotContext) => JSX.Element;\n}\n\nexport function SubscriptionDetailScreen({\n token,\n onNavigateToList,\n onNavigateToSubscription,\n onNotFound,\n onError,\n onSuccess,\n onMutationError,\n renderPaymentMethod,\n renderShippingAddress,\n}: SubscriptionDetailScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onNavigateToList();\n }}\n >\n Subscriptions\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n Subscription #{token}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [token, onNavigateToList],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <SubscriptionDetail\n token={token}\n onNotFound={onNotFound}\n onError={onError}\n onSuccess={onSuccess}\n onMutationError={onMutationError}\n onNavigateToSubscription={onNavigateToSubscription}\n renderPaymentMethod={renderPaymentMethod}\n renderShippingAddress={renderShippingAddress}\n />\n </div>\n );\n}\n","import { useId, useState, type JSX } from \"react\";\nimport { cn, Skeleton } from \"@fluid-app/ui-primitives\";\nimport { ChevronDown } from \"lucide-react\";\nimport type { fluidPay } from \"@fluid-app/fluid-pay-core\";\nimport {\n PaymentIcon,\n getCardDisplayName,\n getCardExpiry,\n} from \"@fluid-app/profile-ui/components/payment-method-card-internals\";\nimport { EllipsesDropdown } from \"@fluid-app/profile-ui\";\n\ninterface SelectablePaymentMethodDropdownProps {\n title: string;\n displayPaymentMethod: fluidPay.CustomerPaymentMethod | null;\n paymentMethodList: fluidPay.CustomerPaymentMethod[];\n selectedPaymentMethodId: number;\n onSelectPaymentMethod: (\n paymentMethod: fluidPay.CustomerPaymentMethod,\n ) => void;\n onAddPaymentMethodClick: () => void;\n onEditPaymentMethod?: (paymentMethod: fluidPay.CustomerPaymentMethod) => void;\n onDeletePaymentMethod?: (\n paymentMethod: fluidPay.CustomerPaymentMethod,\n ) => void;\n onMakeDefaultPaymentMethod?: (\n paymentMethod: fluidPay.CustomerPaymentMethod,\n ) => void;\n addPaymentMethodLabel?: string;\n showAddButton?: boolean;\n isLoading?: boolean;\n /** Disable selection while a parent mutation is in flight. */\n isPending?: boolean;\n className?: string;\n}\n\n/**\n * Selectable variant of profile-ui's PaymentMethodDropdown — same chrome\n * (accordion, collapsed summary, list, add button), with rows that\n * commit a selection through onSelectPaymentMethod when clicked.\n */\nexport function SelectablePaymentMethodDropdown({\n title,\n displayPaymentMethod,\n paymentMethodList,\n selectedPaymentMethodId,\n onSelectPaymentMethod,\n onAddPaymentMethodClick,\n onEditPaymentMethod,\n onDeletePaymentMethod,\n onMakeDefaultPaymentMethod,\n addPaymentMethodLabel = \"+ Add a payment method\",\n showAddButton = true,\n isLoading = false,\n isPending = false,\n className = \"\",\n}: SelectablePaymentMethodDropdownProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const sectionId = useId();\n const collapsedExpiry = displayPaymentMethod\n ? getCardExpiry(displayPaymentMethod)\n : null;\n\n return (\n <div className={cn(\"border-border mb-6 border-b pb-4\", className)}>\n <button\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={sectionId}\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"flex w-full flex-row items-center justify-between\"\n >\n <span className=\"text-muted-foreground text-sm\">{title}</span>\n <ChevronDown\n className={cn(\n \"text-muted-foreground h-4 w-4 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n />\n </button>\n\n {/* Collapsed summary — shows the subscription's current payment method\n inline. Clicking expands. Mirrors checkout's payment-method-dropdown\n collapse behavior. */}\n {!isOpen && displayPaymentMethod && (\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"mt-1 mb-2 flex w-full cursor-pointer flex-row items-center gap-3 text-left\"\n >\n <div className=\"flex h-6 w-10 flex-shrink-0 items-center justify-center\">\n <PaymentIcon\n logoUrl={displayPaymentMethod.details.logo_url}\n brand={displayPaymentMethod.details.card_type}\n alt={displayPaymentMethod.details.card_type ?? \"Payment Method\"}\n />\n </div>\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-foreground text-sm font-medium capitalize\">\n {getCardDisplayName(displayPaymentMethod)}\n </span>\n {collapsedExpiry && (\n <span className=\"text-muted-foreground text-sm\">\n {collapsedExpiry}\n </span>\n )}\n </div>\n </button>\n )}\n\n {isOpen && (\n <div\n id={sectionId}\n className=\"mt-5 flex max-h-[400px] flex-col space-y-4 overflow-y-auto pr-0.5\"\n >\n {isLoading ? (\n <>\n {[1, 2].map((i) => (\n <div\n key={`skeleton-${i}`}\n className=\"bg-muted flex flex-row items-center space-x-2 rounded-sm p-3\"\n >\n <Skeleton className=\"h-6 w-10\" />\n <div className=\"flex flex-col space-y-1\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n </div>\n ))}\n </>\n ) : (\n paymentMethodList.map((paymentMethod) => {\n const isSelected = selectedPaymentMethodId === paymentMethod.id;\n const expiry = getCardExpiry(paymentMethod);\n return (\n <button\n key={paymentMethod.id}\n type=\"button\"\n aria-pressed={isSelected}\n disabled={isPending}\n onClick={() => onSelectPaymentMethod(paymentMethod)}\n className={cn(\n \"text-foreground flex w-full flex-row items-center justify-between gap-3 rounded-sm p-3 text-left transition-colors\",\n \"not-disabled:cursor-pointer disabled:cursor-not-allowed disabled:opacity-60\",\n isSelected\n ? \"bg-background border-border border\"\n : \"bg-muted hover:bg-muted/80 border border-transparent\",\n )}\n >\n <div className=\"flex min-w-0 flex-row items-center gap-3\">\n <div className=\"flex h-6 w-10 flex-shrink-0 items-center justify-center\">\n <PaymentIcon\n logoUrl={paymentMethod.details.logo_url}\n brand={paymentMethod.details.card_type}\n alt={\n paymentMethod.details.card_type ?? \"Payment Method\"\n }\n />\n </div>\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-foreground text-sm font-medium capitalize\">\n {getCardDisplayName(paymentMethod)}\n </span>\n {expiry && (\n <span className=\"text-muted-foreground text-sm\">\n {expiry}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex shrink-0 flex-row items-center gap-2\">\n {paymentMethod.default && (\n <span className=\"bg-primary text-primary-foreground rounded px-2 py-0.5 text-xs font-medium\">\n Default\n </span>\n )}\n {(onEditPaymentMethod ||\n onDeletePaymentMethod ||\n onMakeDefaultPaymentMethod) && (\n <span\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <EllipsesDropdown\n onEdit={\n onEditPaymentMethod\n ? () => onEditPaymentMethod(paymentMethod)\n : undefined\n }\n onDelete={\n onDeletePaymentMethod\n ? () => onDeletePaymentMethod(paymentMethod)\n : undefined\n }\n onMakeDefault={\n !paymentMethod.default && onMakeDefaultPaymentMethod\n ? () => onMakeDefaultPaymentMethod(paymentMethod)\n : undefined\n }\n />\n </span>\n )}\n </div>\n </button>\n );\n })\n )}\n </div>\n )}\n\n {showAddButton && (\n <button\n type=\"button\"\n disabled={isPending}\n className=\"text-foreground mt-3 text-left text-sm disabled:cursor-not-allowed disabled:opacity-60\"\n onClick={onAddPaymentMethodClick}\n >\n {addPaymentMethodLabel}\n </button>\n )}\n </div>\n );\n}\n","import { useMemo, useState, type JSX } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { FluidPayCoreProvider, type fluidPay } from \"@fluid-app/fluid-pay-core\";\nimport { ProfileUIProvider } from \"@fluid-app/profile-core\";\nimport {\n ConfirmActionDialog,\n CreditCardFormDialog,\n EditPaymentMethodDialog,\n type EditPaymentMethodFormData,\n type BillingAddressAutocompleteRenderProps,\n} from \"@fluid-app/profile-ui\";\nimport { AddressAutocompleteInput } from \"@fluid-app/address-autocomplete/components/AddressAutocompleteInput\";\nimport { SelectablePaymentMethodDropdown } from \"./SelectablePaymentMethodDropdown\";\nimport {\n subscriptionsKeys,\n useUpdateSubscriptionInfo,\n} from \"@fluid-app/subscriptions-core\";\nimport type { subscriptions } from \"@fluid-app/subscriptions-core\";\nimport type { PaymentMethodSlotContext } from \"@fluid-app/subscriptions-ui\";\nimport type { UpdatePaymentMethodBody } from \"@fluid-app/portal-core/pay-types\";\nimport { usePayApi } from \"@fluid-app/portal-core/pay-api-context\";\nimport { useCountriesApi } from \"@fluid-app/store-core/countries-api-context\";\nimport { payKeys, storeKeys } from \"../account/query-keys\";\nimport {\n createFluidPayApiAdapter,\n mapToFluidPayPaymentMethod,\n} from \"../adapters/fluid-pay-api-adapter\";\n\nconst t = (key: string): string =>\n ({\n add_credit_card: \"Add Credit Card\",\n edit_card: \"Card Details\",\n delete_credit_card: \"Delete Credit Card\",\n delete_credit_card_message:\n \"Are you sure you want to delete this payment method? This action cannot be undone.\",\n delete: \"Delete\",\n save_card: \"Save Card\",\n securing: \"Loading secure form...\",\n cancel: \"Cancel\",\n close: \"Close\",\n card_number: \"Card Number\",\n expiration_date: \"Expiration (MM / YY)\",\n cvc: \"CVC\",\n cardholder_name: \"Cardholder Name\",\n billing_address: \"Billing Address\",\n country: \"Country\",\n name: \"Name\",\n address_line_1: \"Address Line 1\",\n address_line_2: \"Address Line 2\",\n city: \"City\",\n state: \"State\",\n province: \"Province\",\n zip_code: \"Zip Code\",\n postal_code: \"Postal Code\",\n select_state: \"Select state\",\n select_an_option: \"Select an option\",\n set_as_default_payment_method: \"Set as default payment method\",\n })[key] ??\n key\n .split(\"_\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n// Map the subscription's payment_method shape (which lives on\n// SubscriptionDetail and uses different field names than PayApi) to the\n// fluidPay shape PaymentMethodDropdown consumes.\nfunction subscriptionPaymentMethodToFluidPay(\n raw: subscriptions.SubscriptionDetailPaymentMethod,\n): fluidPay.CustomerPaymentMethod {\n const details = raw.details as {\n last4?: string;\n card_type?: string;\n card_brand?: string;\n logo_url?: string;\n exp_month?: number | string;\n exp_year?: number | string;\n } | null;\n return {\n id: raw.id,\n created_at: raw.created_at,\n default: raw.default,\n details: {\n card_type: details?.card_type ?? null,\n card_brand: details?.card_brand ?? details?.card_type ?? null,\n last_four: details?.last4 ?? \"\",\n exp_month:\n details?.exp_month != null ? Number(details.exp_month) : undefined,\n exp_year:\n details?.exp_year != null ? Number(details.exp_year) : undefined,\n logo_url: details?.logo_url,\n },\n billing_address: null,\n payment_type: raw.payment_type,\n source: raw.source,\n updated_at: raw.updated_at,\n };\n}\n\nexport function PortalSubscriptionPaymentMethodSection({\n paymentMethod: currentPaymentMethod,\n subscriptionToken,\n onSuccess,\n onError,\n}: PaymentMethodSlotContext & {\n onSuccess?: (message: string) => void;\n onError?: (message: string, error: unknown) => void;\n}): JSX.Element {\n const payApi = usePayApi();\n const queryClient = useQueryClient();\n const fluidPayShim = useMemo(\n () => createFluidPayApiAdapter(payApi),\n [payApi],\n );\n\n const [isAddDialogOpen, setIsAddDialogOpen] = useState(false);\n const [editingPaymentMethod, setEditingPaymentMethod] =\n useState<fluidPay.CustomerPaymentMethod | null>(null);\n const [deletingPaymentMethod, setDeletingPaymentMethod] =\n useState<fluidPay.CustomerPaymentMethod | null>(null);\n const [deleteError, setDeleteError] = useState<string | undefined>(undefined);\n\n const { data: paymentMethods = [], isLoading: isLoadingMethods } = useQuery({\n queryKey: payKeys.paymentMethods.list(),\n queryFn: async () => {\n const response = await payApi.fetchPaymentMethods();\n return response.payment_methods.map(mapToFluidPayPaymentMethod);\n },\n });\n\n const countriesApi = useCountriesApi();\n const { data: countriesData } = useQuery({\n queryKey: storeKeys.countries(),\n queryFn: () => countriesApi.listCountries(),\n enabled: isAddDialogOpen || editingPaymentMethod !== null,\n });\n const countryOptions = useMemo(\n () =>\n [...(countriesData?.countries ?? [])]\n .map((c) => ({ iso: c.code, name: c.name }))\n .sort((a, b) => a.name.localeCompare(b.name)),\n [countriesData],\n );\n\n const updateSubscription = useUpdateSubscriptionInfo({\n onSuccess: () => {\n onSuccess?.(\"Payment method updated\");\n queryClient.invalidateQueries({\n queryKey: subscriptionsKeys.detail(subscriptionToken),\n });\n },\n onError: (err) => onError?.(\"Failed to update payment method\", err),\n });\n\n const addCardMutation = useMutation({\n mutationFn: (data: fluidPay.AddCreditCardData) =>\n payApi.createPaymentMethod({\n payment_method: {\n type: \"card\",\n token: data.payment_method.token,\n default: data.default_payment_method,\n },\n }),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: payKeys.paymentMethods.all,\n });\n onSuccess?.(\"Payment method added\");\n },\n onError: (err) => onError?.(\"Failed to add payment method\", err),\n });\n\n const updatePaymentMethodMutation = useMutation({\n mutationFn: ({\n paymentMethodId,\n data,\n }: {\n paymentMethodId: number;\n data: EditPaymentMethodFormData;\n }) =>\n payApi.updatePaymentMethod(paymentMethodId, {\n payment_method: {\n default: data.set_as_default,\n billing_address: {\n name: data.billing_address.name,\n street1: data.billing_address.address1,\n street2: data.billing_address.address2 ?? null,\n city: data.billing_address.city,\n state: data.billing_address.state,\n zip: data.billing_address.zip,\n country: data.billing_address.country_code,\n },\n },\n }),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: payKeys.paymentMethods.all,\n });\n onSuccess?.(\"Payment method updated\");\n },\n onError: (err) => onError?.(\"Failed to update payment method\", err),\n });\n\n const deletePaymentMethodMutation = useMutation({\n mutationFn: (paymentMethodId: number) =>\n payApi.deletePaymentMethod(paymentMethodId),\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: payKeys.paymentMethods.all,\n });\n onSuccess?.(\"Payment method deleted\");\n },\n });\n\n const makeDefaultPaymentMethodMutation = useMutation({\n mutationFn: (pm: fluidPay.CustomerPaymentMethod) => {\n const body: UpdatePaymentMethodBody = {\n payment_method: { default: true },\n };\n if (pm.billing_address) {\n body.payment_method.billing_address = {\n name: pm.billing_address.name,\n street1: pm.billing_address.address1 ?? \"\",\n street2: pm.billing_address.address2 ?? null,\n city: pm.billing_address.city ?? \"\",\n state: pm.billing_address.state ?? \"\",\n zip: pm.billing_address.zip ?? \"\",\n country: pm.billing_address.country_code ?? \"\",\n };\n }\n return payApi.updatePaymentMethod(pm.id, body);\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({\n queryKey: payKeys.paymentMethods.all,\n });\n onSuccess?.(\"Default payment method updated\");\n },\n onError: (err) => onError?.(\"Failed to update default payment method\", err),\n });\n\n // Fall back to the subscription's own payment method when the customer's\n // list doesn't contain it yet (initial load) or no longer contains it (card\n // was removed in another session). Without the fallback the collapsed\n // accordion header would render blank.\n const displayed =\n paymentMethods.find((pm) => pm.id === currentPaymentMethod.id) ??\n subscriptionPaymentMethodToFluidPay(currentPaymentMethod);\n\n const handleConfirmDelete = async () => {\n if (!deletingPaymentMethod) return;\n setDeleteError(undefined);\n try {\n await deletePaymentMethodMutation.mutateAsync(deletingPaymentMethod.id);\n setDeletingPaymentMethod(null);\n } catch (err) {\n setDeleteError(\n err instanceof Error\n ? err.message\n : \"We were unable to delete this payment method. Please try again.\",\n );\n }\n };\n\n return (\n <FluidPayCoreProvider api={fluidPayShim}>\n <ProfileUIProvider t={t}>\n <SelectablePaymentMethodDropdown\n title=\"Payment Method\"\n displayPaymentMethod={displayed}\n paymentMethodList={paymentMethods}\n onAddPaymentMethodClick={() => setIsAddDialogOpen(true)}\n addPaymentMethodLabel=\"+ Add Payment Method\"\n showAddButton\n isLoading={isLoadingMethods}\n isPending={\n updateSubscription.isPending ||\n addCardMutation.isPending ||\n updatePaymentMethodMutation.isPending ||\n makeDefaultPaymentMethodMutation.isPending\n }\n selectedPaymentMethodId={currentPaymentMethod.id}\n onSelectPaymentMethod={(pm) => {\n if (pm.id === currentPaymentMethod.id) return;\n updateSubscription.mutate({\n subscriptionToken,\n body: { payment_method_id: pm.id },\n });\n }}\n onEditPaymentMethod={(pm) => setEditingPaymentMethod(pm)}\n onDeletePaymentMethod={(pm) => {\n setDeleteError(undefined);\n setDeletingPaymentMethod(pm);\n }}\n onMakeDefaultPaymentMethod={(pm) =>\n makeDefaultPaymentMethodMutation.mutate(pm)\n }\n />\n\n <CreditCardFormDialog\n isOpen={isAddDialogOpen}\n onClose={() => setIsAddDialogOpen(false)}\n t={t}\n onSubmit={async (data) => {\n try {\n await addCardMutation.mutateAsync(data);\n setIsAddDialogOpen(false);\n } catch {\n // onError surfaces the toast; swallow here so CreditCardFormDialog\n // doesn't see an unhandled rejection from its onSubmit handler.\n }\n }}\n isSubmitting={addCardMutation.isPending}\n countries={countryOptions}\n jwt=\"\"\n renderAddressAutocomplete={({\n control,\n setValue,\n countryCode,\n }: BillingAddressAutocompleteRenderProps) => (\n <AddressAutocompleteInput\n control={control}\n setValue={setValue}\n countryIso={countryCode}\n addressLineField=\"address1\"\n cityField=\"city\"\n stateField=\"state\"\n postalCodeField=\"zip\"\n placeholder={t(\"address_line_1\")}\n />\n )}\n />\n\n <EditPaymentMethodDialog\n isOpen={editingPaymentMethod !== null}\n paymentMethod={editingPaymentMethod}\n billingAddress={editingPaymentMethod?.billing_address ?? null}\n onClose={() => setEditingPaymentMethod(null)}\n onSubmit={async (data) => {\n if (!editingPaymentMethod) return;\n try {\n await updatePaymentMethodMutation.mutateAsync({\n paymentMethodId: editingPaymentMethod.id,\n data,\n });\n setEditingPaymentMethod(null);\n } catch {\n // onError surfaces the toast.\n }\n }}\n isSubmitting={updatePaymentMethodMutation.isPending}\n countries={countryOptions}\n />\n\n <ConfirmActionDialog\n title={t(\"delete_credit_card\")}\n description={t(\"delete_credit_card_message\")}\n actionText={t(\"delete\")}\n openDialog={deletingPaymentMethod !== null}\n setOpenDialog={(open) => {\n if (!open) {\n setDeletingPaymentMethod(null);\n setDeleteError(undefined);\n }\n }}\n onAction={handleConfirmDelete}\n errorMsg={deleteError}\n isLoading={deletePaymentMethodMutation.isPending}\n />\n </ProfileUIProvider>\n </FluidPayCoreProvider>\n );\n}\n","import { useId, useState, type JSX } from \"react\";\nimport { cn, Skeleton } from \"@fluid-app/ui-primitives\";\nimport { ChevronDown } from \"lucide-react\";\nimport type { fluidPay } from \"@fluid-app/fluid-pay-core\";\nimport { EllipsesDropdown } from \"@fluid-app/profile-ui\";\n\ninterface SelectableAddressDropdownProps {\n title: string;\n displayAddress: fluidPay.CustomerAddress | null;\n addressList: fluidPay.CustomerAddress[];\n selectedAddressId: number;\n onSelectAddress: (address: fluidPay.CustomerAddress) => void;\n onAddAddressClick: () => void;\n onEditAddress?: (address: fluidPay.CustomerAddress) => void;\n onDeleteAddress?: (address: fluidPay.CustomerAddress) => void;\n onMakeDefaultAddress?: (address: fluidPay.CustomerAddress) => void;\n addAddressLabel?: string;\n showAddButton?: boolean;\n isLoading?: boolean;\n /** Disable selection while a parent mutation is in flight. */\n isPending?: boolean;\n className?: string;\n}\n\nfunction formatLine1(address: fluidPay.CustomerAddress): string {\n return [address.address1, address.address2].filter(Boolean).join(\", \");\n}\n\nfunction formatCityStateZip(address: fluidPay.CustomerAddress): string {\n const cityState = [address.city, address.state].filter(Boolean).join(\", \");\n return [cityState, address.postal_code].filter(Boolean).join(\" \");\n}\n\n/**\n * Selectable variant of profile-ui's AddressDropdown, mirroring\n * SelectablePaymentMethodDropdown. Flat layout (no Card wrapper) so it\n * sits inline next to the payment method dropdown in the subscription\n * detail's Payment & Shipping section.\n */\nexport function SelectableAddressDropdown({\n title,\n displayAddress,\n addressList,\n selectedAddressId,\n onSelectAddress,\n onAddAddressClick,\n onEditAddress,\n onDeleteAddress,\n onMakeDefaultAddress,\n addAddressLabel = \"+ Add an Address\",\n showAddButton = true,\n isLoading = false,\n isPending = false,\n className = \"\",\n}: SelectableAddressDropdownProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const sectionId = useId();\n\n return (\n <div className={cn(\"border-border mb-6 border-b pb-4\", className)}>\n <button\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={sectionId}\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"flex w-full flex-row items-center justify-between\"\n >\n <span className=\"text-muted-foreground text-sm\">{title}</span>\n <ChevronDown\n className={cn(\n \"text-muted-foreground h-4 w-4 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n />\n </button>\n\n {/* Collapsed summary — shows the subscription's current address inline.\n Clicking expands. Mirrors checkout's address-dropdown collapse\n behavior. */}\n {!isOpen && displayAddress && (\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"mt-1 mb-2 flex w-full cursor-pointer flex-col text-left\"\n >\n <span className=\"text-foreground text-sm font-medium\">\n {displayAddress.name}\n {displayAddress.name && displayAddress.address1 ? \", \" : \"\"}\n {displayAddress.address1}\n </span>\n <span className=\"text-muted-foreground text-sm\">\n {formatCityStateZip(displayAddress)}\n </span>\n </button>\n )}\n\n {isOpen && (\n <div\n id={sectionId}\n className=\"mt-5 flex max-h-[400px] flex-col space-y-4 overflow-y-auto pr-0.5\"\n >\n {isLoading ? (\n <>\n {[1, 2].map((i) => (\n <div key={`skeleton-${i}`} className=\"bg-muted rounded-sm p-3\">\n <Skeleton className=\"mb-1 h-4 w-32\" />\n <Skeleton className=\"mb-1 h-4 w-48\" />\n <Skeleton className=\"h-4 w-40\" />\n </div>\n ))}\n </>\n ) : (\n addressList.map((address) => {\n const isSelected = selectedAddressId === address.id;\n return (\n <button\n key={address.id}\n type=\"button\"\n aria-pressed={isSelected}\n disabled={isPending}\n onClick={() => onSelectAddress(address)}\n className={cn(\n \"text-foreground flex w-full flex-row items-center justify-between gap-3 rounded-sm p-3 text-left transition-colors\",\n \"not-disabled:cursor-pointer disabled:cursor-not-allowed disabled:opacity-60\",\n isSelected\n ? \"bg-background border-border border\"\n : \"bg-muted hover:bg-muted/80 border border-transparent\",\n )}\n >\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-foreground text-sm font-medium\">\n {address.name}\n </span>\n <span className=\"text-muted-foreground text-sm\">\n {formatLine1(address)}\n </span>\n <span className=\"text-muted-foreground text-sm\">\n {formatCityStateZip(address)}\n </span>\n </div>\n <div className=\"flex shrink-0 flex-row items-center gap-2\">\n {address.default && (\n <span className=\"bg-primary text-primary-foreground rounded px-2 py-0.5 text-xs font-medium\">\n Default\n </span>\n )}\n {(onEditAddress ||\n onDeleteAddress ||\n onMakeDefaultAddress) && (\n <span\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <EllipsesDropdown\n onEdit={\n onEditAddress\n ? () => onEditAddress(address)\n : undefined\n }\n onDelete={\n onDeleteAddress\n ? () => onDeleteAddress(address)\n : undefined\n }\n onMakeDefault={\n !address.default && onMakeDefaultAddress\n ? () => onMakeDefaultAddress(address)\n : undefined\n }\n />\n </span>\n )}\n </div>\n </button>\n );\n })\n )}\n </div>\n )}\n\n {showAddButton && (\n <button\n type=\"button\"\n disabled={isPending}\n className=\"text-foreground mt-3 text-left text-sm disabled:cursor-not-allowed disabled:opacity-60\"\n onClick={onAddAddressClick}\n >\n {addAddressLabel}\n </button>\n )}\n </div>\n );\n}\n","import { useCallback, useMemo, useState, type JSX } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n FluidPayCoreProvider,\n type fluidPay,\n type State,\n} from \"@fluid-app/fluid-pay-core\";\nimport { ProfileUIProvider } from \"@fluid-app/profile-core\";\nimport { AddressFormDialog, ConfirmActionDialog } from \"@fluid-app/profile-ui\";\nimport { AddressAutocompleteInput } from \"@fluid-app/address-autocomplete/components/AddressAutocompleteInput\";\nimport {\n subscriptionsKeys,\n useUpdateSubscriptionInfo,\n} from \"@fluid-app/subscriptions-core\";\nimport type { ShippingAddressSlotContext } from \"@fluid-app/subscriptions-ui\";\nimport type { PayAddress } from \"@fluid-app/portal-core/pay-types\";\nimport { usePayApi } from \"@fluid-app/portal-core/pay-api-context\";\nimport { useCountriesApi } from \"@fluid-app/store-core/countries-api-context\";\nimport { payKeys, storeKeys } from \"../account/query-keys\";\nimport { createFluidPayApiAdapter } from \"../adapters/fluid-pay-api-adapter\";\nimport { SelectableAddressDropdown } from \"./SelectableAddressDropdown\";\n\nconst t = (key: string): string =>\n ({\n add_an_address: \"Add an Address\",\n add_address: \"Add Address\",\n edit_address: \"Edit Address\",\n delete_address: \"Delete Address\",\n delete_address_message:\n \"Are you sure you want to delete this address? This action cannot be undone.\",\n delete: \"Delete\",\n cancel: \"Cancel\",\n country: \"Country\",\n name: \"Name\",\n address_line_1: \"Address Line 1\",\n address_line_2: \"Address Line 2\",\n city: \"City\",\n state: \"State\",\n province: \"Province\",\n zip_code: \"Zip Code\",\n postal_code: \"Postal Code\",\n select_state: \"Select state\",\n select_an_option: \"Select an option\",\n set_as_default_address: \"Set as default address\",\n save_address: \"Save Address\",\n })[key] ??\n key\n .split(\"_\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\nfunction composeAddressName(\n firstName: string,\n lastName: string,\n): string | null {\n const combined = `${firstName} ${lastName}`.trim();\n return combined.length > 0 ? combined : null;\n}\n\nfunction mapToFluidPayAddress(raw: PayAddress): fluidPay.CustomerAddress {\n return {\n id: raw.id,\n address1: raw.street1,\n address2: raw.street2,\n city: raw.city,\n country_code: raw.country,\n default: raw.default,\n name: raw.name,\n postal_code: raw.zip,\n state: raw.state,\n subdivision_code: null,\n };\n}\n\n// Fall back when the customer's saved-address list doesn't contain the\n// subscription's current address (initial load before fetch, or address\n// removed in another session). Without this the collapsed accordion\n// header would render blank.\nfunction subscriptionAddressToFluidPay(\n raw: ShippingAddressSlotContext[\"address\"],\n): fluidPay.CustomerAddress | null {\n if (!raw) return null;\n return {\n id: raw.id,\n address1: raw.address1,\n address2: raw.address2,\n city: raw.city,\n country_code: raw.country_code,\n default: raw.default,\n name: raw.name,\n postal_code: raw.postal_code,\n state: raw.state,\n subdivision_code: raw.subdivision_code,\n };\n}\n\nexport function PortalSubscriptionShippingAddressSection({\n address: currentAddress,\n subscriptionToken,\n onSuccess,\n onError,\n}: ShippingAddressSlotContext & {\n onSuccess?: (message: string) => void;\n onError?: (message: string, error: unknown) => void;\n}): JSX.Element {\n const payApi = usePayApi();\n const queryClient = useQueryClient();\n const fluidPayShim = useMemo(\n () => createFluidPayApiAdapter(payApi),\n [payApi],\n );\n\n const [isFormDialogOpen, setIsFormDialogOpen] = useState(false);\n const [editingAddress, setEditingAddress] =\n useState<fluidPay.CustomerAddress | null>(null);\n const [deletingAddress, setDeletingAddress] =\n useState<fluidPay.CustomerAddress | null>(null);\n const [deleteError, setDeleteError] = useState<string | undefined>(undefined);\n\n const { data: addresses = [], isLoading } = useQuery({\n queryKey: payKeys.addresses.list(),\n queryFn: async () => {\n const response = await payApi.fetchAddresses();\n return response.addresses.map(mapToFluidPayAddress);\n },\n });\n\n const countriesApi = useCountriesApi();\n const { data: countriesData } = useQuery({\n queryKey: storeKeys.countries(),\n queryFn: () => countriesApi.listCountries(),\n enabled: isFormDialogOpen,\n });\n const countryOptions = useMemo(\n () =>\n [...(countriesData?.countries ?? [])]\n .map((c) => ({ iso: c.code, name: c.name }))\n .sort((a, b) => a.name.localeCompare(b.name)),\n [countriesData],\n );\n const statesByCountry = useMemo(() => {\n const map = new Map<string, State[]>();\n for (const c of countriesData?.countries ?? []) {\n map.set(\n c.code,\n c.states.map((s) => ({ name: s.name, isoCode: s.code })),\n );\n }\n return map;\n }, [countriesData]);\n const fetchStatesFromCountries = useCallback(\n (countryCode: string): Promise<State[]> =>\n Promise.resolve(statesByCountry.get(countryCode) ?? []),\n [statesByCountry],\n );\n\n const updateSubscription = useUpdateSubscriptionInfo({\n onSuccess: () => {\n onSuccess?.(\"Shipping address updated\");\n queryClient.invalidateQueries({\n queryKey: subscriptionsKeys.detail(subscriptionToken),\n });\n },\n onError: (err) => onError?.(\"Failed to update shipping address\", err),\n });\n\n const createAddressMutation = useMutation({\n mutationFn: (body: fluidPay.CreateAddressBody) =>\n payApi.createAddress({\n address: {\n name: composeAddressName(\n body.address.first_name,\n body.address.last_name,\n ),\n street1: body.address.address1,\n street2: body.address.address2,\n city: body.address.city,\n state: body.address.state,\n zip: body.address.postal_code,\n country: body.address.country_code,\n default: body.address.default,\n },\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: payKeys.addresses.all });\n onSuccess?.(\"Address added\");\n },\n onError: (err) => onError?.(\"Failed to add address\", err),\n });\n\n const updateAddressMutation = useMutation({\n mutationFn: ({\n addressId,\n body,\n }: {\n addressId: number;\n body: fluidPay.CreateAddressBody;\n }) =>\n payApi.updateAddress(addressId, {\n address: {\n name: composeAddressName(\n body.address.first_name,\n body.address.last_name,\n ),\n street1: body.address.address1,\n street2: body.address.address2,\n city: body.address.city,\n state: body.address.state,\n zip: body.address.postal_code,\n country: body.address.country_code,\n default: body.address.default,\n },\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: payKeys.addresses.all });\n onSuccess?.(\"Address updated\");\n },\n onError: (err) => onError?.(\"Failed to update address\", err),\n });\n\n const deleteAddressMutation = useMutation({\n mutationFn: (addressId: number) => payApi.deleteAddress(addressId),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: payKeys.addresses.all });\n onSuccess?.(\"Address deleted\");\n },\n });\n\n const makeDefaultAddressMutation = useMutation({\n mutationFn: (address: fluidPay.CustomerAddress) =>\n payApi.updateAddress(address.id, {\n address: {\n name: address.name ?? null,\n street1: address.address1 ?? \"\",\n street2: address.address2,\n city: address.city ?? \"\",\n state: address.state ?? \"\",\n zip: address.postal_code ?? \"\",\n country: address.country_code ?? \"\",\n default: true,\n },\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: payKeys.addresses.all });\n onSuccess?.(\"Default address updated\");\n },\n onError: (err) => onError?.(\"Failed to update default address\", err),\n });\n\n const displayed =\n addresses.find((a) => a.id === currentAddress?.id) ??\n subscriptionAddressToFluidPay(currentAddress);\n\n const handleCloseFormDialog = () => {\n setIsFormDialogOpen(false);\n setEditingAddress(null);\n };\n\n const handleConfirmDelete = async () => {\n if (!deletingAddress) return;\n setDeleteError(undefined);\n try {\n await deleteAddressMutation.mutateAsync(deletingAddress.id);\n setDeletingAddress(null);\n } catch (err) {\n setDeleteError(\n err instanceof Error\n ? err.message\n : \"We were unable to delete this address. Please try again.\",\n );\n }\n };\n\n return (\n <FluidPayCoreProvider api={fluidPayShim}>\n <ProfileUIProvider t={t}>\n <SelectableAddressDropdown\n title=\"Shipping Address\"\n displayAddress={displayed}\n addressList={addresses}\n selectedAddressId={currentAddress?.id ?? 0}\n onSelectAddress={(addr) => {\n if (addr.id === currentAddress?.id) return;\n updateSubscription.mutate({\n subscriptionToken,\n body: { address_id: addr.id },\n });\n }}\n onAddAddressClick={() => {\n setEditingAddress(null);\n setIsFormDialogOpen(true);\n }}\n onEditAddress={(addr) => {\n setEditingAddress(addr);\n setIsFormDialogOpen(true);\n }}\n onDeleteAddress={(addr) => {\n setDeleteError(undefined);\n setDeletingAddress(addr);\n }}\n onMakeDefaultAddress={(addr) =>\n makeDefaultAddressMutation.mutate(addr)\n }\n addAddressLabel=\"+ Add an address\"\n showAddButton\n isLoading={isLoading}\n isPending={\n updateSubscription.isPending ||\n createAddressMutation.isPending ||\n updateAddressMutation.isPending ||\n makeDefaultAddressMutation.isPending\n }\n />\n\n <AddressFormDialog\n isOpen={isFormDialogOpen}\n onClose={handleCloseFormDialog}\n selectedAddress={editingAddress}\n t={t}\n onSubmit={async (data: fluidPay.CreateAddressBody) => {\n try {\n if (editingAddress) {\n await updateAddressMutation.mutateAsync({\n addressId: editingAddress.id,\n body: data,\n });\n } else {\n await createAddressMutation.mutateAsync(data);\n }\n handleCloseFormDialog();\n } catch {\n // onError surfaces the toast; swallow here so AddressFormDialog\n // doesn't see an unhandled rejection from its onSubmit handler.\n }\n }}\n isSubmitting={\n createAddressMutation.isPending || updateAddressMutation.isPending\n }\n countries={countryOptions}\n fetchStates={fetchStatesFromCountries}\n renderAddressAutocomplete={({ control, setValue, countryCode }) => (\n <AddressAutocompleteInput\n control={control}\n setValue={setValue}\n countryIso={countryCode}\n addressLineField=\"address1\"\n cityField=\"city\"\n stateField=\"state\"\n postalCodeField=\"postal_code\"\n placeholder={t(\"address_line_1\")}\n />\n )}\n />\n\n <ConfirmActionDialog\n title={t(\"delete_address\")}\n description={t(\"delete_address_message\")}\n actionText={t(\"delete\")}\n openDialog={deletingAddress !== null}\n setOpenDialog={(open) => {\n if (!open) {\n setDeletingAddress(null);\n setDeleteError(undefined);\n }\n }}\n onAction={handleConfirmDelete}\n errorMsg={deleteError}\n isLoading={deleteAddressMutation.isPending}\n />\n </ProfileUIProvider>\n </FluidPayCoreProvider>\n );\n}\n","import { SubscriptionDetailScreen as SubscriptionDetailScreenContent } from \"@fluid-app/subscriptions-ui/screens/SubscriptionDetailScreen\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { PortalSubscriptionPaymentMethodSection } from \"../subscriptions/PortalSubscriptionPaymentMethodSection\";\nimport { PortalSubscriptionShippingAddressSection } from \"../subscriptions/PortalSubscriptionShippingAddressSection\";\n\ninterface SubscriptionDetailScreenProps {\n token: string;\n onToast: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n}\n\nexport function SubscriptionDetailScreen({\n token,\n onToast,\n}: SubscriptionDetailScreenProps): React.JSX.Element {\n const { navigate } = useAppNavigation();\n\n return (\n <SubscriptionDetailScreenContent\n token={token}\n onNavigateToList={() => navigate(\"subscriptions\")}\n onNavigateToSubscription={(nextToken) =>\n navigate(`subscriptions/${nextToken}`)\n }\n onNotFound={() => {\n onToast(\"Subscription not found\", \"warning\");\n navigate(\"subscriptions\");\n }}\n onError={(err) => {\n const message =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`Failed to load subscription: ${message}`, \"error\");\n }}\n onSuccess={(message) => {\n onToast(message, \"success\");\n }}\n onMutationError={(message, err) => {\n const detail = err instanceof Error ? err.message : \"An error occurred\";\n onToast(`${message}: ${detail}`, \"error\");\n }}\n renderPaymentMethod={(ctx) => (\n <PortalSubscriptionPaymentMethodSection\n {...ctx}\n onSuccess={(message) => onToast(message, \"success\")}\n onError={(message, err) => {\n const detail =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`${message}: ${detail}`, \"error\");\n }}\n />\n )}\n renderShippingAddress={(ctx) => (\n <PortalSubscriptionShippingAddressSection\n {...ctx}\n onSuccess={(message) => onToast(message, \"success\")}\n onError={(message, err) => {\n const detail =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`${message}: ${detail}`, \"error\");\n }}\n />\n )}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useAccount } from \"../hooks/use-account\";\nimport { PortalSubscriptionsApiProvider } from \"../subscriptions/PortalSubscriptionsApiProvider\";\nimport { SubscriptionsListScreen } from \"./SubscriptionsListScreen\";\nimport { SubscriptionDetailScreen } from \"./SubscriptionDetailScreen\";\n\ntype SubscriptionsScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n onToast?: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n};\n\nfunction defaultToast(message: string, type: \"success\" | \"error\" | \"warning\") {\n fluidToast({ title: message, type });\n}\n\nexport function SubscriptionsScreen({\n onToast,\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: SubscriptionsScreenProps): React.JSX.Element {\n const { currentSlug } = useAppNavigation();\n const effectiveToast = onToast ?? defaultToast;\n\n // Parse slug: \"subscriptions\" → list, \"subscriptions/{token}\" → detail\n const detailToken = currentSlug.split(\"/\")[1];\n const isDetailView = detailToken !== undefined;\n\n const { data: account } = useAccount();\n const customerId = account?.id;\n const isLoadingCustomer = account === undefined;\n const isCustomerError = false;\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <PortalSubscriptionsApiProvider>\n <SubscriptionDetailScreen\n token={detailToken}\n onToast={effectiveToast}\n />\n </PortalSubscriptionsApiProvider>\n </div>\n );\n }\n\n if (isCustomerError && !isLoadingCustomer) {\n return (\n <div {...divProps}>\n <div className=\"text-muted-foreground px-4 py-8 text-center text-sm\">\n Unable to load account data. Please try again later.\n </div>\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <PortalSubscriptionsApiProvider>\n <SubscriptionsListScreen\n customerId={customerId}\n isLoadingCustomer={isLoadingCustomer}\n />\n </PortalSubscriptionsApiProvider>\n </div>\n );\n}\n\nexport const subscriptionsScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"SubscriptionsScreen\",\n displayName: \"Subscriptions Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"mappings":"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"}