@nextblock-cms/ecom 0.20.3 → 0.21.1

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 (446) hide show
  1. package/README.md +43 -0
  2. package/_virtual/_rolldown/runtime.cjs +1 -0
  3. package/index.cjs +1 -0
  4. package/index.es.js +38 -146
  5. package/lib/CurrencyProvider.cjs +1 -0
  6. package/lib/CurrencyProvider.d.ts +1 -1
  7. package/lib/CurrencyProvider.es.js +85 -95
  8. package/lib/PaymentReadinessProvider.cjs +1 -0
  9. package/lib/PaymentReadinessProvider.d.ts +1 -1
  10. package/lib/PaymentReadinessProvider.es.js +24 -27
  11. package/lib/cart-store.cjs +1 -0
  12. package/lib/cart-store.es.js +109 -121
  13. package/lib/components/AccountNavigationMenu.cjs +1 -0
  14. package/lib/components/AccountNavigationMenu.d.ts +1 -1
  15. package/lib/components/AccountNavigationMenu.es.js +36 -50
  16. package/lib/components/AddToCartButton.cjs +1 -0
  17. package/lib/components/AddToCartButton.d.ts +1 -1
  18. package/lib/components/AddToCartButton.es.js +94 -89
  19. package/lib/components/Cart.cjs +1 -0
  20. package/lib/components/Cart.d.ts +1 -1
  21. package/lib/components/Cart.es.js +261 -180
  22. package/lib/components/CartDrawer.cjs +1 -0
  23. package/lib/components/CartDrawer.d.ts +1 -1
  24. package/lib/components/CartDrawer.es.js +218 -148
  25. package/lib/components/CartIcon.cjs +1 -0
  26. package/lib/components/CartIcon.d.ts +1 -1
  27. package/lib/components/CartIcon.es.js +33 -35
  28. package/lib/components/Checkout.cjs +1 -0
  29. package/lib/components/Checkout.d.ts +1 -1
  30. package/lib/components/Checkout.es.js +1092 -1108
  31. package/lib/components/CouponForm.cjs +1 -0
  32. package/lib/components/CouponForm.d.ts +1 -1
  33. package/lib/components/CouponForm.es.js +136 -148
  34. package/lib/components/CurrencySwitcher.cjs +1 -0
  35. package/lib/components/CurrencySwitcher.d.ts +1 -1
  36. package/lib/components/CurrencySwitcher.es.js +22 -18
  37. package/lib/components/CustomerProfileForm.cjs +1 -0
  38. package/lib/components/CustomerProfileForm.es.js +454 -313
  39. package/lib/components/FeaturedProduct.cjs +1 -0
  40. package/lib/components/FeaturedProduct.d.ts +1 -1
  41. package/lib/components/FeaturedProduct.es.js +98 -83
  42. package/lib/components/FreemiusLicensePanel.cjs +1 -0
  43. package/lib/components/FreemiusLicensePanel.d.ts +1 -1
  44. package/lib/components/FreemiusLicensePanel.es.js +70 -65
  45. package/lib/components/InvoiceDocument.cjs +1 -0
  46. package/lib/components/InvoiceDocument.es.js +256 -192
  47. package/lib/components/InvoiceViewerShell.cjs +29 -0
  48. package/lib/components/InvoiceViewerShell.d.ts +1 -1
  49. package/lib/components/InvoiceViewerShell.es.js +75 -106
  50. package/lib/components/ProductCard.cjs +1 -0
  51. package/lib/components/ProductCard.d.ts +1 -1
  52. package/lib/components/ProductCard.es.js +186 -171
  53. package/lib/components/ProductDetailsLayout.cjs +1 -0
  54. package/lib/components/ProductDetailsLayout.es.js +405 -404
  55. package/lib/components/ProductGallery.cjs +1 -0
  56. package/lib/components/ProductGallery.d.ts +1 -1
  57. package/lib/components/ProductGallery.es.js +51 -54
  58. package/lib/components/ProductGrid.cjs +1 -0
  59. package/lib/components/ProductGrid.d.ts +1 -1
  60. package/lib/components/ProductGrid.es.js +23 -25
  61. package/lib/components/ShippingEstimator.cjs +1 -0
  62. package/lib/components/ShippingEstimator.d.ts +1 -1
  63. package/lib/components/ShippingEstimator.es.js +158 -153
  64. package/lib/components/ShortDescription.cjs +1 -0
  65. package/lib/components/ShortDescription.es.js +17 -17
  66. package/lib/components/SimpleTiptapRenderer.cjs +1 -0
  67. package/lib/components/SimpleTiptapRenderer.es.js +238 -211
  68. package/lib/components/SubscriptionSelector.cjs +1 -0
  69. package/lib/components/SubscriptionSelector.es.js +159 -154
  70. package/lib/countries.cjs +1 -0
  71. package/lib/countries.es.js +232 -75
  72. package/lib/coupon-server.cjs +1 -0
  73. package/lib/coupon-server.es.js +180 -224
  74. package/lib/coupons.cjs +1 -0
  75. package/lib/coupons.es.js +12 -14
  76. package/lib/currency-constants.cjs +1 -0
  77. package/lib/currency-constants.es.js +4 -4
  78. package/lib/currency-rest-client.cjs +1 -0
  79. package/lib/currency-rest-client.es.js +15 -22
  80. package/lib/currency-store.cjs +1 -0
  81. package/lib/currency-store.es.js +20 -27
  82. package/lib/currency-sync.cjs +1 -0
  83. package/lib/currency-sync.es.js +124 -170
  84. package/lib/currency.cjs +1 -0
  85. package/lib/currency.es.js +242 -310
  86. package/lib/customer-addresses.cjs +1 -0
  87. package/lib/customer-addresses.es.js +80 -109
  88. package/lib/customer-orders.cjs +1 -0
  89. package/lib/customer-orders.es.js +31 -43
  90. package/lib/customer.cjs +1 -0
  91. package/lib/customer.es.js +43 -52
  92. package/lib/export-helpers.cjs +1 -0
  93. package/lib/export-helpers.es.js +53 -52
  94. package/lib/factory.cjs +1 -0
  95. package/lib/factory.es.js +10 -7
  96. package/lib/freemius-coupons.cjs +1 -0
  97. package/lib/freemius-coupons.es.js +245 -262
  98. package/lib/freemius-license-claim.cjs +1 -0
  99. package/lib/freemius-license-claim.es.js +87 -71
  100. package/lib/freemius-license.cjs +1 -0
  101. package/lib/freemius-license.es.js +32 -39
  102. package/lib/freemius-order-sync.cjs +1 -0
  103. package/lib/freemius-order-sync.es.js +226 -290
  104. package/lib/freemius-trial-provision.cjs +1 -0
  105. package/lib/freemius-trial-provision.es.js +136 -130
  106. package/lib/inventory-settings.cjs +1 -0
  107. package/lib/inventory-settings.es.js +69 -77
  108. package/lib/invoice-server.cjs +33 -0
  109. package/lib/invoice-server.es.js +94 -141
  110. package/lib/invoice-ui.cjs +1 -0
  111. package/lib/invoice-ui.es.js +50 -66
  112. package/lib/invoice.cjs +1 -0
  113. package/lib/invoice.es.js +85 -94
  114. package/lib/order-inventory.cjs +61 -0
  115. package/lib/order-inventory.es.js +67 -79
  116. package/lib/order-tax-details.cjs +1 -0
  117. package/lib/order-tax-details.es.js +142 -153
  118. package/lib/pages/cms/coupons/CouponEditorForm.cjs +1 -0
  119. package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
  120. package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
  121. package/lib/pages/cms/coupons/CouponsPage.cjs +5 -0
  122. package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
  123. package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
  124. package/lib/pages/cms/coupons/CreateCouponDialog.cjs +1 -0
  125. package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
  126. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
  127. package/lib/pages/cms/coupons/EditCouponPage.cjs +1 -0
  128. package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
  129. package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
  130. package/lib/pages/cms/coupons/ProductScopePicker.cjs +1 -0
  131. package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
  132. package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
  133. package/lib/pages/cms/coupons/actions.cjs +1 -0
  134. package/lib/pages/cms/coupons/actions.es.js +112 -115
  135. package/lib/pages/cms/coupons/index.cjs +1 -0
  136. package/lib/pages/cms/coupons/index.es.js +3 -0
  137. package/lib/pages/cms/coupons/product-options.cjs +1 -0
  138. package/lib/pages/cms/coupons/product-options.es.js +21 -23
  139. package/lib/pages/cms/orders/ExportReportsDialog.cjs +1 -0
  140. package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
  141. package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
  142. package/lib/pages/cms/orders/OrderDetailPage.cjs +1 -0
  143. package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
  144. package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
  145. package/lib/pages/cms/orders/OrderPrintButton.cjs +1 -0
  146. package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
  147. package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
  148. package/lib/pages/cms/orders/OrderStatusForm.cjs +1 -0
  149. package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
  150. package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
  151. package/lib/pages/cms/orders/OrdersPage.cjs +1 -0
  152. package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
  153. package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
  154. package/lib/pages/cms/orders/actions.cjs +7 -0
  155. package/lib/pages/cms/orders/actions.es.js +53 -69
  156. package/lib/pages/cms/orders/export-actions.cjs +1 -0
  157. package/lib/pages/cms/orders/export-actions.es.js +23 -26
  158. package/lib/pages/cms/orders/index.cjs +1 -0
  159. package/lib/pages/cms/orders/index.es.js +6 -0
  160. package/lib/pages/cms/orders/server-actions.cjs +1 -0
  161. package/lib/pages/cms/orders/server-actions.es.js +60 -51
  162. package/lib/pages/cms/payments/PaymentsClient.cjs +1 -0
  163. package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
  164. package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
  165. package/lib/pages/cms/payments/PaymentsPage.cjs +1 -0
  166. package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
  167. package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
  168. package/lib/pages/cms/payments/actions.cjs +1 -0
  169. package/lib/pages/cms/payments/actions.es.js +38 -48
  170. package/lib/pages/cms/payments/index.cjs +1 -0
  171. package/lib/pages/cms/payments/index.es.js +3 -0
  172. package/lib/pages/cms/payments/queries.cjs +1 -0
  173. package/lib/pages/cms/payments/queries.es.js +38 -48
  174. package/lib/pages/cms/products/ProductsPage.cjs +1 -0
  175. package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
  176. package/lib/pages/cms/products/ProductsPage.es.js +63 -66
  177. package/lib/pages/cms/products/[id]/edit/EditProductPage.cjs +1 -0
  178. package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
  179. package/lib/pages/cms/products/[id]/edit/EditProductPage.es.js +139 -0
  180. package/lib/pages/cms/products/actions.cjs +44 -0
  181. package/lib/pages/cms/products/actions.es.js +121 -162
  182. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs +1 -0
  183. package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
  184. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
  185. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs +1 -0
  186. package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
  187. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
  188. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs +1 -0
  189. package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
  190. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
  191. package/lib/pages/cms/products/categories/components/CategoryManager.cjs +1 -0
  192. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
  193. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs +1 -0
  194. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
  195. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs +1 -0
  196. package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
  197. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
  198. package/lib/pages/cms/products/components/DeleteProductButton.cjs +1 -0
  199. package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
  200. package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
  201. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs +1 -0
  202. package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
  203. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
  204. package/lib/pages/cms/products/components/ProductCategorySelector.cjs +1 -0
  205. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
  206. package/lib/pages/cms/products/components/ProductForm.cjs +1 -0
  207. package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
  208. package/lib/pages/cms/products/components/ProductMediaManager.cjs +1 -0
  209. package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
  210. package/lib/pages/cms/products/components/ProductsBulkTable.cjs +1 -0
  211. package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
  212. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
  213. package/lib/pages/cms/products/components/SaleScheduleFields.cjs +1 -0
  214. package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
  215. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
  216. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs +1 -0
  217. package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
  218. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
  219. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs +5 -0
  220. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
  221. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
  222. package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
  223. package/lib/pages/cms/products/components/VariationsEditor.cjs +1 -0
  224. package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
  225. package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
  226. package/lib/pages/cms/products/index.cjs +1 -0
  227. package/lib/pages/cms/products/index.es.js +8 -0
  228. package/lib/pages/cms/products/inventory/InventoryPage.cjs +1 -0
  229. package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
  230. package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
  231. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs +2 -0
  232. package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
  233. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
  234. package/lib/pages/cms/products/inventory/actions.cjs +3 -0
  235. package/lib/pages/cms/products/inventory/actions.es.js +83 -91
  236. package/lib/pages/cms/products/new/NewProductPage.cjs +1 -0
  237. package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
  238. package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
  239. package/lib/pages/cms/products/product-price-sync.cjs +1 -0
  240. package/lib/pages/cms/products/product-price-sync.es.js +74 -89
  241. package/lib/pages/cms/products/server-actions.cjs +1 -0
  242. package/lib/pages/cms/products/server-actions.es.js +250 -233
  243. package/lib/pages/cms/shipping/ShippingPage.cjs +5 -0
  244. package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
  245. package/lib/pages/cms/shipping/components/RateForm.cjs +1 -0
  246. package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
  247. package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
  248. package/lib/pages/cms/shipping/components/ZoneForm.cjs +1 -0
  249. package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
  250. package/lib/pages/cms/shipping/index.cjs +1 -0
  251. package/lib/pages/cms/shipping/index.es.js +3 -0
  252. package/lib/pages/cms/shipping/server-actions.cjs +1 -0
  253. package/lib/pages/cms/shipping/server-actions.es.js +131 -149
  254. package/lib/pages/cms/taxes/TaxesPage.cjs +1 -0
  255. package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
  256. package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
  257. package/lib/pages/cms/taxes/actions.cjs +1 -0
  258. package/lib/pages/cms/taxes/actions.es.js +41 -53
  259. package/lib/pages/cms/taxes/components/TaxRateForm.cjs +1 -0
  260. package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
  261. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
  262. package/lib/pages/cms/taxes/index.cjs +1 -0
  263. package/lib/pages/cms/taxes/index.es.js +3 -0
  264. package/lib/payment-config.cjs +1 -0
  265. package/lib/payment-config.es.js +110 -126
  266. package/lib/product-actions.cjs +238 -0
  267. package/lib/product-actions.es.js +289 -544
  268. package/lib/product-context.cjs +1 -0
  269. package/lib/product-context.es.js +13 -15
  270. package/lib/product-schema.cjs +1 -0
  271. package/lib/product-schema.es.js +99 -134
  272. package/lib/providers/freemius.cjs +1 -0
  273. package/lib/providers/freemius.es.js +446 -530
  274. package/lib/providers/stripe.cjs +1 -0
  275. package/lib/providers/stripe.es.js +417 -477
  276. package/lib/server-actions/coupon-actions.cjs +1 -0
  277. package/lib/server-actions/coupon-actions.es.js +22 -22
  278. package/lib/server-actions/customer-actions.cjs +1 -0
  279. package/lib/server-actions/customer-actions.es.js +26 -28
  280. package/lib/server-actions/product-actions.cjs +1 -0
  281. package/lib/server-actions/product-actions.es.js +9 -15
  282. package/lib/server-actions/shipping-actions.cjs +1 -0
  283. package/lib/server-actions/shipping-actions.es.js +27 -24
  284. package/lib/server-actions/tax-actions.cjs +1 -0
  285. package/lib/server-actions/tax-actions.es.js +33 -39
  286. package/lib/shared-inventory.cjs +15 -0
  287. package/lib/shared-inventory.es.js +111 -160
  288. package/lib/shipping/resolver.cjs +7 -0
  289. package/lib/shipping/resolver.es.js +44 -61
  290. package/lib/shipping-rate-currency.cjs +1 -0
  291. package/lib/shipping-rate-currency.es.js +52 -67
  292. package/lib/states.cjs +1 -0
  293. package/lib/states.es.js +333 -154
  294. package/lib/stripe/checkout.cjs +1 -0
  295. package/lib/stripe/checkout.es.js +125 -181
  296. package/lib/stripe/client.cjs +1 -0
  297. package/lib/stripe/client.es.js +14 -19
  298. package/lib/stripe/order-sync.cjs +1 -0
  299. package/lib/stripe/order-sync.es.js +106 -126
  300. package/lib/stripe/webhooks.cjs +1 -0
  301. package/lib/stripe/webhooks.es.js +37 -31
  302. package/lib/tax-calculation.cjs +1 -0
  303. package/lib/tax-calculation.es.js +84 -98
  304. package/lib/trials.cjs +1 -0
  305. package/lib/trials.es.js +24 -30
  306. package/lib/types.cjs +1 -0
  307. package/lib/types.es.js +21 -27
  308. package/lib/use-cart.cjs +1 -0
  309. package/lib/use-cart.es.js +38 -40
  310. package/lib/use-price-formatter.cjs +1 -0
  311. package/lib/use-price-formatter.es.js +10 -11
  312. package/lib/variation-utils.cjs +1 -0
  313. package/lib/variation-utils.es.js +199 -261
  314. package/lib/zod-config.cjs +1 -0
  315. package/lib/zod-config.es.js +5 -6
  316. package/package.json +22 -21
  317. package/server.cjs +1 -0
  318. package/server.es.js +56 -211
  319. package/index.cjs.js +0 -1
  320. package/lib/CurrencyProvider.cjs.js +0 -1
  321. package/lib/PaymentReadinessProvider.cjs.js +0 -1
  322. package/lib/cart-store.cjs.js +0 -1
  323. package/lib/components/AccountNavigationMenu.cjs.js +0 -1
  324. package/lib/components/AddToCartButton.cjs.js +0 -1
  325. package/lib/components/Cart.cjs.js +0 -1
  326. package/lib/components/CartDrawer.cjs.js +0 -1
  327. package/lib/components/CartIcon.cjs.js +0 -1
  328. package/lib/components/Checkout.cjs.js +0 -1
  329. package/lib/components/CouponForm.cjs.js +0 -1
  330. package/lib/components/CurrencySwitcher.cjs.js +0 -1
  331. package/lib/components/CustomerProfileForm.cjs.js +0 -1
  332. package/lib/components/FeaturedProduct.cjs.js +0 -1
  333. package/lib/components/FreemiusLicensePanel.cjs.js +0 -1
  334. package/lib/components/InvoiceDocument.cjs.js +0 -1
  335. package/lib/components/InvoiceViewerShell.cjs.js +0 -29
  336. package/lib/components/ProductCard.cjs.js +0 -1
  337. package/lib/components/ProductDetailsLayout.cjs.js +0 -1
  338. package/lib/components/ProductGallery.cjs.js +0 -1
  339. package/lib/components/ProductGrid.cjs.js +0 -1
  340. package/lib/components/ShippingEstimator.cjs.js +0 -1
  341. package/lib/components/ShortDescription.cjs.js +0 -1
  342. package/lib/components/SimpleTiptapRenderer.cjs.js +0 -1
  343. package/lib/components/SubscriptionSelector.cjs.js +0 -1
  344. package/lib/countries.cjs.js +0 -1
  345. package/lib/coupon-server.cjs.js +0 -1
  346. package/lib/coupons.cjs.js +0 -1
  347. package/lib/currency-constants.cjs.js +0 -1
  348. package/lib/currency-rest-client.cjs.js +0 -1
  349. package/lib/currency-store.cjs.js +0 -1
  350. package/lib/currency-sync.cjs.js +0 -1
  351. package/lib/currency.cjs.js +0 -1
  352. package/lib/customer-addresses.cjs.js +0 -1
  353. package/lib/customer-orders.cjs.js +0 -1
  354. package/lib/customer.cjs.js +0 -1
  355. package/lib/export-helpers.cjs.js +0 -1
  356. package/lib/factory.cjs.js +0 -1
  357. package/lib/freemius-coupons.cjs.js +0 -1
  358. package/lib/freemius-license-claim.cjs.js +0 -1
  359. package/lib/freemius-license.cjs.js +0 -1
  360. package/lib/freemius-order-sync.cjs.js +0 -1
  361. package/lib/freemius-trial-provision.cjs.js +0 -1
  362. package/lib/inventory-settings.cjs.js +0 -1
  363. package/lib/invoice-server.cjs.js +0 -33
  364. package/lib/invoice-ui.cjs.js +0 -1
  365. package/lib/invoice.cjs.js +0 -1
  366. package/lib/order-inventory.cjs.js +0 -61
  367. package/lib/order-tax-details.cjs.js +0 -1
  368. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +0 -1
  369. package/lib/pages/cms/coupons/CouponsPage.cjs.js +0 -5
  370. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +0 -1
  371. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +0 -1
  372. package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +0 -1
  373. package/lib/pages/cms/coupons/actions.cjs.js +0 -1
  374. package/lib/pages/cms/coupons/product-options.cjs.js +0 -1
  375. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +0 -1
  376. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +0 -1
  377. package/lib/pages/cms/orders/OrderPrintButton.cjs.js +0 -1
  378. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +0 -1
  379. package/lib/pages/cms/orders/OrdersPage.cjs.js +0 -1
  380. package/lib/pages/cms/orders/actions.cjs.js +0 -7
  381. package/lib/pages/cms/orders/export-actions.cjs.js +0 -1
  382. package/lib/pages/cms/orders/server-actions.cjs.js +0 -1
  383. package/lib/pages/cms/payments/PaymentsClient.cjs.js +0 -1
  384. package/lib/pages/cms/payments/PaymentsPage.cjs.js +0 -1
  385. package/lib/pages/cms/payments/actions.cjs.js +0 -1
  386. package/lib/pages/cms/payments/queries.cjs.js +0 -1
  387. package/lib/pages/cms/products/ProductsPage.cjs.js +0 -1
  388. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +0 -1
  389. package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +0 -156
  390. package/lib/pages/cms/products/actions.cjs.js +0 -44
  391. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +0 -1
  392. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +0 -1
  393. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +0 -1
  394. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +0 -1
  395. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +0 -1
  396. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +0 -1
  397. package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +0 -1
  398. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +0 -1
  399. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +0 -1
  400. package/lib/pages/cms/products/components/ProductForm.cjs.js +0 -1
  401. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +0 -1
  402. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +0 -1
  403. package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +0 -1
  404. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +0 -1
  405. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +0 -5
  406. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +0 -1
  407. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +0 -1
  408. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +0 -2
  409. package/lib/pages/cms/products/inventory/actions.cjs.js +0 -3
  410. package/lib/pages/cms/products/new/NewProductPage.cjs.js +0 -1
  411. package/lib/pages/cms/products/product-price-sync.cjs.js +0 -1
  412. package/lib/pages/cms/products/server-actions.cjs.js +0 -1
  413. package/lib/pages/cms/shipping/ShippingPage.cjs.js +0 -5
  414. package/lib/pages/cms/shipping/components/RateForm.cjs.js +0 -1
  415. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +0 -1
  416. package/lib/pages/cms/shipping/server-actions.cjs.js +0 -1
  417. package/lib/pages/cms/taxes/TaxesPage.cjs.js +0 -1
  418. package/lib/pages/cms/taxes/actions.cjs.js +0 -1
  419. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +0 -1
  420. package/lib/payment-config.cjs.js +0 -1
  421. package/lib/product-actions.cjs.js +0 -238
  422. package/lib/product-context.cjs.js +0 -1
  423. package/lib/product-schema.cjs.js +0 -1
  424. package/lib/providers/freemius.cjs.js +0 -5
  425. package/lib/providers/stripe.cjs.js +0 -1
  426. package/lib/server-actions/coupon-actions.cjs.js +0 -1
  427. package/lib/server-actions/customer-actions.cjs.js +0 -1
  428. package/lib/server-actions/product-actions.cjs.js +0 -1
  429. package/lib/server-actions/shipping-actions.cjs.js +0 -1
  430. package/lib/server-actions/tax-actions.cjs.js +0 -1
  431. package/lib/shared-inventory.cjs.js +0 -15
  432. package/lib/shipping/resolver.cjs.js +0 -7
  433. package/lib/shipping-rate-currency.cjs.js +0 -1
  434. package/lib/states.cjs.js +0 -1
  435. package/lib/stripe/checkout.cjs.js +0 -1
  436. package/lib/stripe/client.cjs.js +0 -1
  437. package/lib/stripe/order-sync.cjs.js +0 -1
  438. package/lib/stripe/webhooks.cjs.js +0 -1
  439. package/lib/tax-calculation.cjs.js +0 -1
  440. package/lib/trials.cjs.js +0 -1
  441. package/lib/types.cjs.js +0 -1
  442. package/lib/use-cart.cjs.js +0 -1
  443. package/lib/use-price-formatter.cjs.js +0 -1
  444. package/lib/variation-utils.cjs.js +0 -1
  445. package/lib/zod-config.cjs.js +0 -1
  446. package/server.cjs.js +0 -1
@@ -0,0 +1 @@
1
+ const e=require("./currency.cjs"),t=require("./coupons.cjs");function n(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t}function r(e,t){return e===`all`||e===t}function i(e){return e===`stripe`||e===`freemius`?e:null}async function a(t){let{data:n,error:r}=await t.from(`currencies`).select(`code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount`).eq(`is_active`,!0).order(`code`,{ascending:!0});if(r)throw Error(r.message);return(n||[]).map(t=>e.normalizeCurrencyRecord(t))}async function o(n){let{client:r,items:o}=n,s=await a(r);if(s.length===0)throw Error(`No active currencies are configured.`);let c=s.find(e=>e.code===(n.currencyCode||``).toUpperCase())??e.getDefaultCurrency(s),l=[...new Set(o.map(e=>e.product_id).filter(Boolean))],u=[...new Set(o.map(e=>e.variant_id).filter(e=>!!e))];if(l.length===0)return{lines:[],currencies:s,selectedCurrency:c};let[{data:d,error:f},p]=await Promise.all([r.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id`).in(`id`,l),u.length?r.from(`product_variants`).select(`id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at`).in(`id`,u):Promise.resolve({data:[],error:null})]);if(f)throw Error(f.message);if(p.error)throw Error(p.error.message);let m=d||[],h=p.data||[],g=new Map(m.map(e=>[e.id,e])),_=new Map(h.map(e=>[e.id,e])),v=[];for(let n of o){let r=g.get(n.product_id);if(!r)continue;let a=i(r.payment_provider)??(r.product_type===`digital`?`freemius`:`stripe`),o=n.variant_id?_.get(n.variant_id):null,l=o&&o.product_id===r.id?o:r,u=e.resolveEffectivePriceForCurrency({prices:e.normalizePriceMap(l.prices),salePrices:e.normalizeSalePriceMap(l.sale_prices),fallbackPrice:l.price,fallbackSalePrice:l.sale_price,saleStartAt:l.sale_start_at,saleEndAt:l.sale_end_at,scheduledPrice:l.scheduled_price,scheduledPrices:e.normalizePriceMap(l.scheduled_prices),scheduledPriceAt:l.scheduled_price_at,currencyCode:c.code,currencies:s}),d=a===`freemius`?1:Math.max(1,Number(n.quantity)||1),f=Math.max(0,u.sale_price??u.price);v.push({key:t.getCartLineCouponKey(n),product_id:r.id,variant_id:o?.id??null,title:r.title,quantity:d,provider:a,subtotal:f*d,freemius_product_id:r.freemius_product_id??null,freemius_plan_id:r.freemius_plan_id??null})}return{lines:v,currencies:s,selectedCurrency:c}}async function s(e,t){let{data:n,error:r}=await e.from(`coupon_products`).select(`product_id`).eq(`coupon_id`,t);if(r)throw Error(r.message);return new Set((n||[]).map(e=>e.product_id))}function c(e,t){let n=e.reduce((e,t)=>e+t.subtotal,0),r=Math.min(t,n);if(n<=0||r<=0)return new Map;let i=new Map,a=0;return e.forEach((t,o)=>{let s=o===e.length-1?r-a:Math.min(t.subtotal,Math.floor(r*t.subtotal/n));a+=s,i.set(t.key,s)}),i}async function l(e){let i=t.normalizeCouponCode(e.code);if(!i)return{success:!1,error:`Enter a coupon code.`,errorKey:`ecommerce.coupon_code_required`};if(!e.items.length)return{success:!1,error:`Add an item to your cart before applying a coupon.`,errorKey:`ecommerce.coupon_cart_empty`};let{data:a,error:l}=await e.client.from(`coupons`).select(`id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count`).ilike(`code`,i).maybeSingle();if(l)throw Error(l.message);if(!a)return{success:!1,error:`Coupon code not found.`,errorKey:`ecommerce.coupon_not_found`};let u=a,d=new Date,f=n(u.starts_at),p=n(u.ends_at);if(!u.is_active)return{success:!1,error:`This coupon is not active.`,errorKey:`ecommerce.coupon_inactive`};if(f&&f>d)return{success:!1,error:`This coupon is not active yet.`,errorKey:`ecommerce.coupon_not_started`};if(p&&p<=d)return{success:!1,error:`This coupon has expired.`,errorKey:`ecommerce.coupon_expired`};if(u.redemption_limit!==null&&(u.redemptions_count??0)>=u.redemption_limit)return{success:!1,error:`This coupon has reached its redemption limit.`,errorKey:`ecommerce.coupon_limit_reached`};let[{lines:m},h]=await Promise.all([o({client:e.client,items:e.items,currencyCode:e.currencyCode}),s(e.client,u.id)]),g=h.size>0,_=m.filter(e=>e.subtotal>0&&r(u.provider_scope,e.provider)&&(!g||h.has(e.product_id)));if(_.length===0)return{success:!1,error:`This coupon does not apply to the items in your cart.`,errorKey:`ecommerce.coupon_not_applicable`};let v=u.discount_type===`fixed`?c(_,u.discount_amount):null,y=t.emptyProviderDiscounts(),b=_.map(e=>{let t=u.discount_type===`percent`?Math.min(e.subtotal,Math.round(e.subtotal*u.discount_amount/100)):v?.get(e.key)??0;return y[e.provider]+=t,{key:e.key,product_id:e.product_id,variant_id:e.variant_id,provider:e.provider,title:e.title,quantity:e.quantity,subtotal:e.subtotal,discount:t}});return{success:!0,quote:{couponId:u.id,code:u.code,name:u.name,discountType:u.discount_type,discountAmount:u.discount_amount,providerScope:u.provider_scope,eligibleSubtotal:_.reduce((e,t)=>e+t.subtotal,0),discountTotal:y.stripe+y.freemius,providerDiscounts:y,lineDiscounts:b}}}function u(e){let t=new Map;for(let n of e?.lineDiscounts??[])t.set(n.key,n.discount);return t}async function d(e){let{error:t}=await e.client.from(`coupon_redemptions`).insert({coupon_id:e.quote.couponId,order_id:e.orderId,coupon_code:e.quote.code,provider:e.provider,discount_total:Math.max(0,e.discountTotal),user_id:e.userId||null,customer_email:e.customerEmail||null,metadata:e.metadata||{}});if(t){console.error(`Failed to record coupon redemption:`,t);return}let{data:n}=await e.client.from(`coupons`).select(`redemptions_count`).eq(`id`,e.quote.couponId).single();await e.client.from(`coupons`).update({redemptions_count:(n?.redemptions_count??0)+1,updated_at:new Date().toISOString()}).eq(`id`,e.quote.couponId)}exports.getCouponQuote=l,exports.getQuoteLineDiscountMap=u,exports.recordCouponRedemption=d;
@@ -1,234 +1,190 @@
1
- import { normalizeCouponCode as S, getCartLineCouponKey as q, emptyProviderDiscounts as E } from "./coupons.es.js";
2
- import { getDefaultCurrency as x, resolveEffectivePriceForCurrency as A, normalizePriceMap as C, normalizeSalePriceMap as D, normalizeCurrencyRecord as T } from "./currency.es.js";
3
- function M(e) {
4
- if (!e)
5
- return null;
6
- const t = new Date(e);
7
- return Number.isNaN(t.getTime()) ? null : t;
1
+ import { getDefaultCurrency as e, normalizeCurrencyRecord as t, normalizePriceMap as n, normalizeSalePriceMap as r, resolveEffectivePriceForCurrency as i } from "./currency.es.js";
2
+ import { emptyProviderDiscounts as a, getCartLineCouponKey as o, normalizeCouponCode as s } from "./coupons.es.js";
3
+ //#region src/lib/coupon-server.ts
4
+ function c(e) {
5
+ if (!e) return null;
6
+ let t = new Date(e);
7
+ return Number.isNaN(t.getTime()) ? null : t;
8
8
  }
9
- function k(e, t) {
10
- return e === "all" || e === t;
9
+ function l(e, t) {
10
+ return e === "all" || e === t;
11
11
  }
12
- function I(e) {
13
- return e === "stripe" || e === "freemius" ? e : null;
12
+ function u(e) {
13
+ return e === "stripe" || e === "freemius" ? e : null;
14
14
  }
15
- async function K(e) {
16
- const { data: t, error: c } = await e.from("currencies").select(
17
- "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"
18
- ).eq("is_active", !0).order("code", { ascending: !0 });
19
- if (c)
20
- throw new Error(c.message);
21
- return (t || []).map((s) => T(s));
15
+ async function d(e) {
16
+ let { data: n, error: r } = await e.from("currencies").select("code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount").eq("is_active", !0).order("code", { ascending: !0 });
17
+ if (r) throw Error(r.message);
18
+ return (n || []).map((e) => t(e));
22
19
  }
23
- async function L(e) {
24
- const { client: t, items: c } = e, s = await K(t);
25
- if (s.length === 0)
26
- throw new Error("No active currencies are configured.");
27
- const r = s.find((n) => n.code === (e.currencyCode || "").toUpperCase()) ?? x(s), u = [...new Set(c.map((n) => n.product_id).filter(Boolean))], i = [
28
- ...new Set(
29
- c.map((n) => n.variant_id).filter((n) => !!n)
30
- )
31
- ];
32
- if (u.length === 0)
33
- return {
34
- lines: [],
35
- currencies: s,
36
- selectedCurrency: r
37
- };
38
- const [{ data: p, error: f }, a] = await Promise.all([
39
- t.from("products").select(
40
- "id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id"
41
- ).in("id", u),
42
- i.length ? t.from("product_variants").select("id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at").in("id", i) : Promise.resolve({ data: [], error: null })
43
- ]);
44
- if (f)
45
- throw new Error(f.message);
46
- if (a.error)
47
- throw new Error(a.error.message);
48
- const g = p || [], _ = a.data || [], v = new Map(
49
- g.map((n) => [n.id, n])
50
- ), m = new Map(
51
- _.map((n) => [n.id, n])
52
- ), h = [];
53
- for (const n of c) {
54
- const o = v.get(n.product_id);
55
- if (!o)
56
- continue;
57
- const l = I(o.payment_provider) ?? (o.product_type === "digital" ? "freemius" : "stripe"), y = n.variant_id ? m.get(n.variant_id) : null, d = y && y.product_id === o.id ? y : o, w = A({
58
- prices: C(d.prices),
59
- salePrices: D(d.sale_prices),
60
- fallbackPrice: d.price,
61
- fallbackSalePrice: d.sale_price,
62
- saleStartAt: d.sale_start_at,
63
- saleEndAt: d.sale_end_at,
64
- scheduledPrice: d.scheduled_price,
65
- scheduledPrices: C(d.scheduled_prices),
66
- scheduledPriceAt: d.scheduled_price_at,
67
- currencyCode: r.code,
68
- currencies: s
69
- }), b = l === "freemius" ? 1 : Math.max(1, Number(n.quantity) || 1), P = Math.max(0, w.sale_price ?? w.price);
70
- h.push({
71
- key: q(n),
72
- product_id: o.id,
73
- variant_id: y?.id ?? null,
74
- title: o.title,
75
- quantity: b,
76
- provider: l,
77
- subtotal: P * b,
78
- freemius_product_id: o.freemius_product_id ?? null,
79
- freemius_plan_id: o.freemius_plan_id ?? null
80
- });
81
- }
82
- return {
83
- lines: h,
84
- currencies: s,
85
- selectedCurrency: r
86
- };
20
+ async function f(t) {
21
+ let { client: a, items: s } = t, c = await d(a);
22
+ if (c.length === 0) throw Error("No active currencies are configured.");
23
+ let l = c.find((e) => e.code === (t.currencyCode || "").toUpperCase()) ?? e(c), f = [...new Set(s.map((e) => e.product_id).filter(Boolean))], p = [...new Set(s.map((e) => e.variant_id).filter((e) => !!e))];
24
+ if (f.length === 0) return {
25
+ lines: [],
26
+ currencies: c,
27
+ selectedCurrency: l
28
+ };
29
+ let [{ data: m, error: h }, g] = await Promise.all([a.from("products").select("id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id").in("id", f), p.length ? a.from("product_variants").select("id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at").in("id", p) : Promise.resolve({
30
+ data: [],
31
+ error: null
32
+ })]);
33
+ if (h) throw Error(h.message);
34
+ if (g.error) throw Error(g.error.message);
35
+ let _ = m || [], v = g.data || [], y = new Map(_.map((e) => [e.id, e])), b = new Map(v.map((e) => [e.id, e])), x = [];
36
+ for (let e of s) {
37
+ let t = y.get(e.product_id);
38
+ if (!t) continue;
39
+ let a = u(t.payment_provider) ?? (t.product_type === "digital" ? "freemius" : "stripe"), s = e.variant_id ? b.get(e.variant_id) : null, d = s && s.product_id === t.id ? s : t, f = i({
40
+ prices: n(d.prices),
41
+ salePrices: r(d.sale_prices),
42
+ fallbackPrice: d.price,
43
+ fallbackSalePrice: d.sale_price,
44
+ saleStartAt: d.sale_start_at,
45
+ saleEndAt: d.sale_end_at,
46
+ scheduledPrice: d.scheduled_price,
47
+ scheduledPrices: n(d.scheduled_prices),
48
+ scheduledPriceAt: d.scheduled_price_at,
49
+ currencyCode: l.code,
50
+ currencies: c
51
+ }), p = a === "freemius" ? 1 : Math.max(1, Number(e.quantity) || 1), m = Math.max(0, f.sale_price ?? f.price);
52
+ x.push({
53
+ key: o(e),
54
+ product_id: t.id,
55
+ variant_id: s?.id ?? null,
56
+ title: t.title,
57
+ quantity: p,
58
+ provider: a,
59
+ subtotal: m * p,
60
+ freemius_product_id: t.freemius_product_id ?? null,
61
+ freemius_plan_id: t.freemius_plan_id ?? null
62
+ });
63
+ }
64
+ return {
65
+ lines: x,
66
+ currencies: c,
67
+ selectedCurrency: l
68
+ };
87
69
  }
88
- async function R(e, t) {
89
- const { data: c, error: s } = await e.from("coupon_products").select("product_id").eq("coupon_id", t);
90
- if (s)
91
- throw new Error(s.message);
92
- return new Set((c || []).map((r) => r.product_id));
70
+ async function p(e, t) {
71
+ let { data: n, error: r } = await e.from("coupon_products").select("product_id").eq("coupon_id", t);
72
+ if (r) throw Error(r.message);
73
+ return new Set((n || []).map((e) => e.product_id));
93
74
  }
94
- function z(e, t) {
95
- const c = e.reduce((i, p) => i + p.subtotal, 0), s = Math.min(t, c);
96
- if (c <= 0 || s <= 0)
97
- return /* @__PURE__ */ new Map();
98
- const r = /* @__PURE__ */ new Map();
99
- let u = 0;
100
- return e.forEach((i, p) => {
101
- const a = p === e.length - 1 ? s - u : Math.min(
102
- i.subtotal,
103
- Math.floor(s * i.subtotal / c)
104
- );
105
- u += a, r.set(i.key, a);
106
- }), r;
75
+ function m(e, t) {
76
+ let n = e.reduce((e, t) => e + t.subtotal, 0), r = Math.min(t, n);
77
+ if (n <= 0 || r <= 0) return /* @__PURE__ */ new Map();
78
+ let i = /* @__PURE__ */ new Map(), a = 0;
79
+ return e.forEach((t, o) => {
80
+ let s = o === e.length - 1 ? r - a : Math.min(t.subtotal, Math.floor(r * t.subtotal / n));
81
+ a += s, i.set(t.key, s);
82
+ }), i;
107
83
  }
108
- async function B(e) {
109
- const t = S(e.code);
110
- if (!t)
111
- return {
112
- success: !1,
113
- error: "Enter a coupon code.",
114
- errorKey: "ecommerce.coupon_code_required"
115
- };
116
- if (!e.items.length)
117
- return {
118
- success: !1,
119
- error: "Add an item to your cart before applying a coupon.",
120
- errorKey: "ecommerce.coupon_cart_empty"
121
- };
122
- const { data: c, error: s } = await e.client.from("coupons").select(
123
- "id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count"
124
- ).ilike("code", t).maybeSingle();
125
- if (s)
126
- throw new Error(s.message);
127
- if (!c)
128
- return {
129
- success: !1,
130
- error: "Coupon code not found.",
131
- errorKey: "ecommerce.coupon_not_found"
132
- };
133
- const r = c, u = /* @__PURE__ */ new Date(), i = M(r.starts_at), p = M(r.ends_at);
134
- if (!r.is_active)
135
- return {
136
- success: !1,
137
- error: "This coupon is not active.",
138
- errorKey: "ecommerce.coupon_inactive"
139
- };
140
- if (i && i > u)
141
- return {
142
- success: !1,
143
- error: "This coupon is not active yet.",
144
- errorKey: "ecommerce.coupon_not_started"
145
- };
146
- if (p && p <= u)
147
- return {
148
- success: !1,
149
- error: "This coupon has expired.",
150
- errorKey: "ecommerce.coupon_expired"
151
- };
152
- if (r.redemption_limit !== null && (r.redemptions_count ?? 0) >= r.redemption_limit)
153
- return {
154
- success: !1,
155
- error: "This coupon has reached its redemption limit.",
156
- errorKey: "ecommerce.coupon_limit_reached"
157
- };
158
- const [{ lines: f }, a] = await Promise.all([
159
- L({
160
- client: e.client,
161
- items: e.items,
162
- currencyCode: e.currencyCode
163
- }),
164
- R(e.client, r.id)
165
- ]), g = a.size > 0, _ = f.filter(
166
- (o) => o.subtotal > 0 && k(r.provider_scope, o.provider) && (!g || a.has(o.product_id))
167
- );
168
- if (_.length === 0)
169
- return {
170
- success: !1,
171
- error: "This coupon does not apply to the items in your cart.",
172
- errorKey: "ecommerce.coupon_not_applicable"
173
- };
174
- const v = r.discount_type === "fixed" ? z(_, r.discount_amount) : null, m = E(), h = _.map((o) => {
175
- const l = r.discount_type === "percent" ? Math.min(o.subtotal, Math.round(o.subtotal * r.discount_amount / 100)) : v?.get(o.key) ?? 0;
176
- return m[o.provider] += l, {
177
- key: o.key,
178
- product_id: o.product_id,
179
- variant_id: o.variant_id,
180
- provider: o.provider,
181
- title: o.title,
182
- quantity: o.quantity,
183
- subtotal: o.subtotal,
184
- discount: l
185
- };
186
- });
187
- return {
188
- success: !0,
189
- quote: {
190
- couponId: r.id,
191
- code: r.code,
192
- name: r.name,
193
- discountType: r.discount_type,
194
- discountAmount: r.discount_amount,
195
- providerScope: r.provider_scope,
196
- eligibleSubtotal: _.reduce((o, l) => o + l.subtotal, 0),
197
- discountTotal: m.stripe + m.freemius,
198
- providerDiscounts: m,
199
- lineDiscounts: h
200
- }
201
- };
84
+ async function h(e) {
85
+ let t = s(e.code);
86
+ if (!t) return {
87
+ success: !1,
88
+ error: "Enter a coupon code.",
89
+ errorKey: "ecommerce.coupon_code_required"
90
+ };
91
+ if (!e.items.length) return {
92
+ success: !1,
93
+ error: "Add an item to your cart before applying a coupon.",
94
+ errorKey: "ecommerce.coupon_cart_empty"
95
+ };
96
+ let { data: n, error: r } = await e.client.from("coupons").select("id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count").ilike("code", t).maybeSingle();
97
+ if (r) throw Error(r.message);
98
+ if (!n) return {
99
+ success: !1,
100
+ error: "Coupon code not found.",
101
+ errorKey: "ecommerce.coupon_not_found"
102
+ };
103
+ let i = n, o = /* @__PURE__ */ new Date(), u = c(i.starts_at), d = c(i.ends_at);
104
+ if (!i.is_active) return {
105
+ success: !1,
106
+ error: "This coupon is not active.",
107
+ errorKey: "ecommerce.coupon_inactive"
108
+ };
109
+ if (u && u > o) return {
110
+ success: !1,
111
+ error: "This coupon is not active yet.",
112
+ errorKey: "ecommerce.coupon_not_started"
113
+ };
114
+ if (d && d <= o) return {
115
+ success: !1,
116
+ error: "This coupon has expired.",
117
+ errorKey: "ecommerce.coupon_expired"
118
+ };
119
+ if (i.redemption_limit !== null && (i.redemptions_count ?? 0) >= i.redemption_limit) return {
120
+ success: !1,
121
+ error: "This coupon has reached its redemption limit.",
122
+ errorKey: "ecommerce.coupon_limit_reached"
123
+ };
124
+ let [{ lines: h }, g] = await Promise.all([f({
125
+ client: e.client,
126
+ items: e.items,
127
+ currencyCode: e.currencyCode
128
+ }), p(e.client, i.id)]), _ = g.size > 0, v = h.filter((e) => e.subtotal > 0 && l(i.provider_scope, e.provider) && (!_ || g.has(e.product_id)));
129
+ if (v.length === 0) return {
130
+ success: !1,
131
+ error: "This coupon does not apply to the items in your cart.",
132
+ errorKey: "ecommerce.coupon_not_applicable"
133
+ };
134
+ let y = i.discount_type === "fixed" ? m(v, i.discount_amount) : null, b = a(), x = v.map((e) => {
135
+ let t = i.discount_type === "percent" ? Math.min(e.subtotal, Math.round(e.subtotal * i.discount_amount / 100)) : y?.get(e.key) ?? 0;
136
+ return b[e.provider] += t, {
137
+ key: e.key,
138
+ product_id: e.product_id,
139
+ variant_id: e.variant_id,
140
+ provider: e.provider,
141
+ title: e.title,
142
+ quantity: e.quantity,
143
+ subtotal: e.subtotal,
144
+ discount: t
145
+ };
146
+ });
147
+ return {
148
+ success: !0,
149
+ quote: {
150
+ couponId: i.id,
151
+ code: i.code,
152
+ name: i.name,
153
+ discountType: i.discount_type,
154
+ discountAmount: i.discount_amount,
155
+ providerScope: i.provider_scope,
156
+ eligibleSubtotal: v.reduce((e, t) => e + t.subtotal, 0),
157
+ discountTotal: b.stripe + b.freemius,
158
+ providerDiscounts: b,
159
+ lineDiscounts: x
160
+ }
161
+ };
202
162
  }
203
- function Q(e) {
204
- const t = /* @__PURE__ */ new Map();
205
- for (const c of e?.lineDiscounts ?? [])
206
- t.set(c.key, c.discount);
207
- return t;
163
+ function g(e) {
164
+ let t = /* @__PURE__ */ new Map();
165
+ for (let n of e?.lineDiscounts ?? []) t.set(n.key, n.discount);
166
+ return t;
208
167
  }
209
- async function O(e) {
210
- const { error: t } = await e.client.from("coupon_redemptions").insert({
211
- coupon_id: e.quote.couponId,
212
- order_id: e.orderId,
213
- coupon_code: e.quote.code,
214
- provider: e.provider,
215
- discount_total: Math.max(0, e.discountTotal),
216
- user_id: e.userId || null,
217
- customer_email: e.customerEmail || null,
218
- metadata: e.metadata || {}
219
- });
220
- if (t) {
221
- console.error("Failed to record coupon redemption:", t);
222
- return;
223
- }
224
- const { data: c } = await e.client.from("coupons").select("redemptions_count").eq("id", e.quote.couponId).single();
225
- await e.client.from("coupons").update({
226
- redemptions_count: (c?.redemptions_count ?? 0) + 1,
227
- updated_at: (/* @__PURE__ */ new Date()).toISOString()
228
- }).eq("id", e.quote.couponId);
168
+ async function _(e) {
169
+ let { error: t } = await e.client.from("coupon_redemptions").insert({
170
+ coupon_id: e.quote.couponId,
171
+ order_id: e.orderId,
172
+ coupon_code: e.quote.code,
173
+ provider: e.provider,
174
+ discount_total: Math.max(0, e.discountTotal),
175
+ user_id: e.userId || null,
176
+ customer_email: e.customerEmail || null,
177
+ metadata: e.metadata || {}
178
+ });
179
+ if (t) {
180
+ console.error("Failed to record coupon redemption:", t);
181
+ return;
182
+ }
183
+ let { data: n } = await e.client.from("coupons").select("redemptions_count").eq("id", e.quote.couponId).single();
184
+ await e.client.from("coupons").update({
185
+ redemptions_count: (n?.redemptions_count ?? 0) + 1,
186
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
187
+ }).eq("id", e.quote.couponId);
229
188
  }
230
- export {
231
- B as getCouponQuote,
232
- Q as getQuoteLineDiscountMap,
233
- O as recordCouponRedemption
234
- };
189
+ //#endregion
190
+ export { h as getCouponQuote, g as getQuoteLineDiscountMap, _ as recordCouponRedemption };
@@ -0,0 +1 @@
1
+ function e(e){return(e||``).trim().replace(/\s+/g,``).toUpperCase()}function t(e){return`${e.product_id}:${e.variant_id||`base`}`}function n(){return{stripe:0,freemius:0}}exports.emptyProviderDiscounts=n,exports.getCartLineCouponKey=t,exports.normalizeCouponCode=e;
package/lib/coupons.es.js CHANGED
@@ -1,17 +1,15 @@
1
- function r(e) {
2
- return (e || "").trim().replace(/\s+/g, "").toUpperCase();
1
+ //#region src/lib/coupons.ts
2
+ function e(e) {
3
+ return (e || "").trim().replace(/\s+/g, "").toUpperCase();
3
4
  }
4
- function n(e) {
5
- return `${e.product_id}:${e.variant_id || "base"}`;
5
+ function t(e) {
6
+ return `${e.product_id}:${e.variant_id || "base"}`;
6
7
  }
7
- function t() {
8
- return {
9
- stripe: 0,
10
- freemius: 0
11
- };
8
+ function n() {
9
+ return {
10
+ stripe: 0,
11
+ freemius: 0
12
+ };
12
13
  }
13
- export {
14
- t as emptyProviderDiscounts,
15
- n as getCartLineCouponKey,
16
- r as normalizeCouponCode
17
- };
14
+ //#endregion
15
+ export { n as emptyProviderDiscounts, t as getCartLineCouponKey, e as normalizeCouponCode };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=`NEXTBLOCK_CURRENCY`;exports.CURRENCY_COOKIE_NAME=e;
@@ -1,4 +1,4 @@
1
- const C = "NEXTBLOCK_CURRENCY";
2
- export {
3
- C as CURRENCY_COOKIE_NAME
4
- };
1
+ //#region src/lib/currency-constants.ts
2
+ var e = "NEXTBLOCK_CURRENCY";
3
+ //#endregion
4
+ export { e as CURRENCY_COOKIE_NAME };
@@ -0,0 +1 @@
1
+ async function e(){let e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,t=process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY||process.env.SUPABASE_ANON_KEY||process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY||process.env.SUPABASE_PUBLISHABLE_KEY;if(!e||!t)return[];let n=new URL(`/rest/v1/currencies`,e);n.searchParams.set(`select`,`code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount`),n.searchParams.set(`is_active`,`eq.true`),n.searchParams.set(`order`,`code.asc`);let r=await fetch(n.toString(),{headers:{apikey:t,Authorization:`Bearer ${t}`}});if(!r.ok)return[];let i=await r.json();return Array.isArray(i)?i:[]}exports.fetchActiveCurrenciesFromRest=e;
@@ -1,23 +1,16 @@
1
- async function n() {
2
- const s = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL, r = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY;
3
- if (!s || !r)
4
- return [];
5
- const e = new URL("/rest/v1/currencies", s);
6
- e.searchParams.set(
7
- "select",
8
- "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"
9
- ), e.searchParams.set("is_active", "eq.true"), e.searchParams.set("order", "code.asc");
10
- const a = await fetch(e.toString(), {
11
- headers: {
12
- apikey: r,
13
- Authorization: `Bearer ${r}`
14
- }
15
- });
16
- if (!a.ok)
17
- return [];
18
- const t = await a.json();
19
- return Array.isArray(t) ? t : [];
1
+ //#region src/lib/currency-rest-client.ts
2
+ async function e() {
3
+ let e = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL, t = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY;
4
+ if (!e || !t) return [];
5
+ let n = new URL("/rest/v1/currencies", e);
6
+ n.searchParams.set("select", "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"), n.searchParams.set("is_active", "eq.true"), n.searchParams.set("order", "code.asc");
7
+ let r = await fetch(n.toString(), { headers: {
8
+ apikey: t,
9
+ Authorization: `Bearer ${t}`
10
+ } });
11
+ if (!r.ok) return [];
12
+ let i = await r.json();
13
+ return Array.isArray(i) ? i : [];
20
14
  }
21
- export {
22
- n as fetchActiveCurrenciesFromRest
23
- };
15
+ //#endregion
16
+ export { e as fetchActiveCurrenciesFromRest };
@@ -0,0 +1 @@
1
+ let e=require("zustand"),t=require("zustand/middleware"),n=require("@nextblock-cms/utils");var r=(0,e.create)()((0,t.persist)(e=>({activeCurrencyCode:null,hasHydrated:!1,setActiveCurrencyCode:t=>e({activeCurrencyCode:(0,n.normalizeCurrencyCode)(t)}),setHasHydrated:t=>e({hasHydrated:t})}),{name:`currency-preference-storage`,storage:(0,t.createJSONStorage)(()=>localStorage),skipHydration:!0,partialize:e=>({activeCurrencyCode:e.activeCurrencyCode}),onRehydrateStorage:()=>e=>{e?.setHasHydrated(!0)}}));exports.useCurrencyPreferenceStore=r;
@@ -1,27 +1,20 @@
1
- import { create as t } from "zustand";
2
- import { persist as a, createJSONStorage as o } from "zustand/middleware";
3
- import { normalizeCurrencyCode as c } from "@nextblock-cms/utils";
4
- const s = t()(
5
- a(
6
- (e) => ({
7
- activeCurrencyCode: null,
8
- hasHydrated: !1,
9
- setActiveCurrencyCode: (r) => e({ activeCurrencyCode: c(r) }),
10
- setHasHydrated: (r) => e({ hasHydrated: r })
11
- }),
12
- {
13
- name: "currency-preference-storage",
14
- storage: o(() => localStorage),
15
- skipHydration: !0,
16
- partialize: (e) => ({
17
- activeCurrencyCode: e.activeCurrencyCode
18
- }),
19
- onRehydrateStorage: () => (e) => {
20
- e?.setHasHydrated(!0);
21
- }
22
- }
23
- )
24
- );
25
- export {
26
- s as useCurrencyPreferenceStore
27
- };
1
+ import { create as e } from "zustand";
2
+ import { createJSONStorage as t, persist as n } from "zustand/middleware";
3
+ import { normalizeCurrencyCode as r } from "@nextblock-cms/utils";
4
+ //#region src/lib/currency-store.ts
5
+ var i = e()(n((e) => ({
6
+ activeCurrencyCode: null,
7
+ hasHydrated: !1,
8
+ setActiveCurrencyCode: (t) => e({ activeCurrencyCode: r(t) }),
9
+ setHasHydrated: (t) => e({ hasHydrated: t })
10
+ }), {
11
+ name: "currency-preference-storage",
12
+ storage: t(() => localStorage),
13
+ skipHydration: !0,
14
+ partialize: (e) => ({ activeCurrencyCode: e.activeCurrencyCode }),
15
+ onRehydrateStorage: () => (e) => {
16
+ e?.setHasHydrated(!0);
17
+ }
18
+ }));
19
+ //#endregion
20
+ export { i as useCurrencyPreferenceStore };
@@ -0,0 +1 @@
1
+ const e=require("./currency.cjs");let t=require("@nextblock-cms/utils"),n=require("@nextblock-cms/db/server");require("server-only");var r=`https://api.frankfurter.dev`,i=`id, code, symbol, exchange_rate, is_default, is_active, auto_update_exchange_rate, auto_sync_product_prices, exchange_rate_source, exchange_rate_updated_at, updated_at, rounding_mode, rounding_increment, rounding_charm_amount`;function a(e){if(!e.id)throw Error(`Currency ${(0,t.normalizeCurrencyCode)(e.code)} is missing its ID.`);return e.id}function o(){return process.env.FX_API_BASE_URL?.trim().replace(/\/+$/,``)||r}function s(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return`${t.host}${n&&n!==`/`?n:``}`}catch{return e}}function c(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.base==`string`&&typeof t.date==`string`&&typeof t.quote==`string`&&typeof t.rate==`number`&&Number.isFinite(t.rate)&&t.rate>0}function l(e){return Array.isArray(e)&&e.every(c)}async function u(){let e=(0,n.getServiceRoleSupabaseClient)(),{data:t,error:r}=await e.from(`currencies`).select(i).order(`code`,{ascending:!0});if(r)throw Error(r.message);return{supabase:e,currencies:t||[]}}async function d(e){let n=(0,t.normalizeCurrencyCode)(e.newDefaultCurrencyCode),r=Number(e.previousBaseRate);if(!Number.isFinite(r)||r<=0)throw Error(`Cannot rebase exchange rates without a valid previous base rate.`);let{supabase:i,currencies:o}=await u();if(!o.find(e=>(0,t.normalizeCurrencyCode)(e.code)===n))throw Error(`Currency ${n} was not found for rebasing.`);let s=new Date().toISOString(),c=[],l=o.map(e=>{let i=a(e),o=(0,t.normalizeCurrencyCode)(e.code),l=o===n?1:Number((e.exchange_rate/r).toFixed(10));return c.push(o),{...e,id:i,exchange_rate:l,auto_update_exchange_rate:o!==n&&e.auto_update_exchange_rate,exchange_rate_source:o===n?`store-default`:e.exchange_rate_source||`rebased-default`,exchange_rate_updated_at:s,updated_at:s}}),{error:d}=await i.from(`currencies`).upsert(l,{onConflict:`id`});if(d)throw Error(d.message);return{rebasedAt:s,newDefaultCurrencyCode:n,updatedCurrencies:c}}async function f(){let{supabase:n,currencies:r}=await u();if(!r.length)throw Error(`No currencies are configured yet.`);let i=r.map(t=>e.normalizeCurrencyRecord(t)),c=e.getDefaultCurrency(i),d=(0,t.normalizeCurrencyCode)(c.code),f=r.find(e=>(0,t.normalizeCurrencyCode)(e.code)===d);if(!f)throw Error(`Default currency ${d} could not be found for syncing.`);let p=r.filter(e=>(0,t.normalizeCurrencyCode)(e.code)!==d&&e.auto_update_exchange_rate!==!1),m=o(),h=s(m),g=new Date().toISOString(),{error:_}=await n.from(`currencies`).upsert({...f,id:a(f),exchange_rate:1,auto_update_exchange_rate:!1,exchange_rate_source:`store-default`,exchange_rate_updated_at:g,updated_at:g},{onConflict:`id`});if(_)throw Error(_.message);if(!p.length)return{baseCurrencyCode:d,fetchedAt:g,provider:h,providerUrl:m,skippedCurrencies:[],updatedCurrencies:[]};let v=new URL(`${m}/v2/rates`);v.searchParams.set(`base`,d),v.searchParams.set(`quotes`,[...new Set(p.map(e=>(0,t.normalizeCurrencyCode)(e.code)))].join(`,`));let y=await fetch(v.toString(),{cache:`no-store`,headers:{Accept:`application/json`}});if(!y.ok){let e=await y.text();throw Error(`FX provider request failed (${y.status}): ${e||`Unexpected response body.`}`)}let b=await y.json();if(!l(b))throw Error(`FX provider returned an unexpected response payload.`);let x=new Map;for(let e of b)x.set((0,t.normalizeCurrencyCode)(e.quote),e.rate);let S=[],C=[],w=[];for(let e of p){let n=(0,t.normalizeCurrencyCode)(e.code),r=x.get(n);if(!r||!Number.isFinite(r)||r<=0){C.push(n);continue}w.push({...e,id:a(e),exchange_rate:Number(r.toFixed(10)),exchange_rate_source:h,exchange_rate_updated_at:g,updated_at:g}),S.push(n)}if(w.length){let{error:e}=await n.from(`currencies`).upsert(w,{onConflict:`id`});if(e)throw Error(e.message)}return{baseCurrencyCode:d,fetchedAt:g,provider:h,providerUrl:m,skippedCurrencies:C,updatedCurrencies:S}}async function p(e){let r=(0,t.normalizeCurrencyCode)(e),{error:i}=await(0,n.getServiceRoleSupabaseClient)().rpc(`clear_currency_price_overrides`,{target_currency:r});if(i)throw Error(i.message);return{currencyCode:r}}exports.clearAutoSyncedCurrencyPriceOverrides=p,exports.rebaseStoreCurrencyExchangeRates=d,exports.syncStoreCurrencyRates=f;