@nextblock-cms/ecom 0.20.1 → 0.21.0

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 (317) hide show
  1. package/_virtual/_rolldown/runtime.cjs.js +1 -0
  2. package/index.cjs.js +1 -1
  3. package/index.es.js +38 -146
  4. package/lib/CurrencyProvider.cjs.js +1 -1
  5. package/lib/CurrencyProvider.d.ts +1 -1
  6. package/lib/CurrencyProvider.es.js +85 -95
  7. package/lib/PaymentReadinessProvider.cjs.js +1 -1
  8. package/lib/PaymentReadinessProvider.d.ts +1 -1
  9. package/lib/PaymentReadinessProvider.es.js +24 -27
  10. package/lib/cart-store.cjs.js +1 -1
  11. package/lib/cart-store.es.js +109 -121
  12. package/lib/components/AccountNavigationMenu.cjs.js +1 -1
  13. package/lib/components/AccountNavigationMenu.d.ts +1 -1
  14. package/lib/components/AccountNavigationMenu.es.js +36 -50
  15. package/lib/components/AddToCartButton.cjs.js +1 -1
  16. package/lib/components/AddToCartButton.d.ts +1 -1
  17. package/lib/components/AddToCartButton.es.js +94 -89
  18. package/lib/components/Cart.cjs.js +1 -1
  19. package/lib/components/Cart.d.ts +1 -1
  20. package/lib/components/Cart.es.js +261 -180
  21. package/lib/components/CartDrawer.cjs.js +1 -1
  22. package/lib/components/CartDrawer.d.ts +1 -1
  23. package/lib/components/CartDrawer.es.js +218 -148
  24. package/lib/components/CartIcon.cjs.js +1 -1
  25. package/lib/components/CartIcon.d.ts +1 -1
  26. package/lib/components/CartIcon.es.js +33 -35
  27. package/lib/components/Checkout.cjs.js +1 -1
  28. package/lib/components/Checkout.d.ts +1 -1
  29. package/lib/components/Checkout.es.js +1092 -1108
  30. package/lib/components/CouponForm.cjs.js +1 -1
  31. package/lib/components/CouponForm.d.ts +1 -1
  32. package/lib/components/CouponForm.es.js +136 -148
  33. package/lib/components/CurrencySwitcher.cjs.js +1 -1
  34. package/lib/components/CurrencySwitcher.d.ts +1 -1
  35. package/lib/components/CurrencySwitcher.es.js +22 -18
  36. package/lib/components/CustomerProfileForm.cjs.js +1 -1
  37. package/lib/components/CustomerProfileForm.es.js +454 -313
  38. package/lib/components/FeaturedProduct.cjs.js +1 -1
  39. package/lib/components/FeaturedProduct.d.ts +1 -1
  40. package/lib/components/FeaturedProduct.es.js +98 -83
  41. package/lib/components/FreemiusLicensePanel.cjs.js +1 -1
  42. package/lib/components/FreemiusLicensePanel.d.ts +1 -1
  43. package/lib/components/FreemiusLicensePanel.es.js +70 -65
  44. package/lib/components/InvoiceDocument.cjs.js +1 -1
  45. package/lib/components/InvoiceDocument.es.js +256 -192
  46. package/lib/components/InvoiceViewerShell.cjs.js +2 -2
  47. package/lib/components/InvoiceViewerShell.d.ts +1 -1
  48. package/lib/components/InvoiceViewerShell.es.js +75 -106
  49. package/lib/components/ProductCard.cjs.js +1 -1
  50. package/lib/components/ProductCard.d.ts +1 -1
  51. package/lib/components/ProductCard.es.js +186 -171
  52. package/lib/components/ProductDetailsLayout.cjs.js +1 -1
  53. package/lib/components/ProductDetailsLayout.es.js +405 -404
  54. package/lib/components/ProductGallery.cjs.js +1 -1
  55. package/lib/components/ProductGallery.d.ts +1 -1
  56. package/lib/components/ProductGallery.es.js +51 -54
  57. package/lib/components/ProductGrid.cjs.js +1 -1
  58. package/lib/components/ProductGrid.d.ts +1 -1
  59. package/lib/components/ProductGrid.es.js +23 -25
  60. package/lib/components/ShippingEstimator.cjs.js +1 -1
  61. package/lib/components/ShippingEstimator.d.ts +1 -1
  62. package/lib/components/ShippingEstimator.es.js +158 -153
  63. package/lib/components/ShortDescription.cjs.js +1 -1
  64. package/lib/components/ShortDescription.es.js +17 -17
  65. package/lib/components/SimpleTiptapRenderer.cjs.js +1 -1
  66. package/lib/components/SimpleTiptapRenderer.es.js +238 -211
  67. package/lib/components/SubscriptionSelector.cjs.js +1 -1
  68. package/lib/components/SubscriptionSelector.es.js +159 -154
  69. package/lib/countries.cjs.js +1 -1
  70. package/lib/countries.es.js +232 -75
  71. package/lib/coupon-server.cjs.js +1 -1
  72. package/lib/coupon-server.es.js +180 -224
  73. package/lib/coupons.cjs.js +1 -1
  74. package/lib/coupons.es.js +12 -14
  75. package/lib/currency-constants.cjs.js +1 -1
  76. package/lib/currency-constants.es.js +4 -4
  77. package/lib/currency-rest-client.cjs.js +1 -1
  78. package/lib/currency-rest-client.es.js +15 -22
  79. package/lib/currency-store.cjs.js +1 -1
  80. package/lib/currency-store.es.js +20 -27
  81. package/lib/currency-sync.cjs.js +1 -1
  82. package/lib/currency-sync.es.js +124 -170
  83. package/lib/currency.cjs.js +1 -1
  84. package/lib/currency.es.js +242 -310
  85. package/lib/customer-addresses.cjs.js +1 -1
  86. package/lib/customer-addresses.es.js +80 -109
  87. package/lib/customer-orders.cjs.js +1 -1
  88. package/lib/customer-orders.es.js +31 -43
  89. package/lib/customer.cjs.js +1 -1
  90. package/lib/customer.es.js +43 -52
  91. package/lib/export-helpers.cjs.js +1 -1
  92. package/lib/export-helpers.es.js +53 -52
  93. package/lib/factory.cjs.js +1 -1
  94. package/lib/factory.es.js +10 -7
  95. package/lib/freemius-coupons.cjs.js +1 -1
  96. package/lib/freemius-coupons.es.js +245 -262
  97. package/lib/freemius-license-claim.cjs.js +1 -1
  98. package/lib/freemius-license-claim.es.js +87 -71
  99. package/lib/freemius-license.cjs.js +1 -1
  100. package/lib/freemius-license.es.js +32 -39
  101. package/lib/freemius-order-sync.cjs.js +1 -1
  102. package/lib/freemius-order-sync.es.js +226 -290
  103. package/lib/freemius-trial-provision.cjs.js +1 -1
  104. package/lib/freemius-trial-provision.es.js +136 -130
  105. package/lib/inventory-settings.cjs.js +1 -1
  106. package/lib/inventory-settings.es.js +69 -77
  107. package/lib/invoice-server.cjs.js +3 -3
  108. package/lib/invoice-server.es.js +94 -141
  109. package/lib/invoice-ui.cjs.js +1 -1
  110. package/lib/invoice-ui.es.js +50 -66
  111. package/lib/invoice.cjs.js +1 -1
  112. package/lib/invoice.es.js +85 -94
  113. package/lib/order-inventory.cjs.js +25 -25
  114. package/lib/order-inventory.es.js +67 -79
  115. package/lib/order-tax-details.cjs.js +1 -1
  116. package/lib/order-tax-details.es.js +142 -153
  117. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +1 -1
  118. package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
  119. package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
  120. package/lib/pages/cms/coupons/CouponsPage.cjs.js +2 -2
  121. package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
  122. package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
  123. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +1 -1
  124. package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
  125. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
  126. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +1 -1
  127. package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
  128. package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
  129. package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +1 -1
  130. package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
  131. package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
  132. package/lib/pages/cms/coupons/actions.cjs.js +1 -1
  133. package/lib/pages/cms/coupons/actions.es.js +112 -115
  134. package/lib/pages/cms/coupons/index.cjs.js +1 -0
  135. package/lib/pages/cms/coupons/index.es.js +3 -0
  136. package/lib/pages/cms/coupons/product-options.cjs.js +1 -1
  137. package/lib/pages/cms/coupons/product-options.es.js +21 -23
  138. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +1 -1
  139. package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
  140. package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
  141. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +1 -1
  142. package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
  143. package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
  144. package/lib/pages/cms/orders/OrderPrintButton.cjs.js +1 -1
  145. package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
  146. package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
  147. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +1 -1
  148. package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
  149. package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
  150. package/lib/pages/cms/orders/OrdersPage.cjs.js +1 -1
  151. package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
  152. package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
  153. package/lib/pages/cms/orders/actions.cjs.js +3 -3
  154. package/lib/pages/cms/orders/actions.es.js +53 -69
  155. package/lib/pages/cms/orders/export-actions.cjs.js +1 -1
  156. package/lib/pages/cms/orders/export-actions.es.js +23 -26
  157. package/lib/pages/cms/orders/index.cjs.js +1 -0
  158. package/lib/pages/cms/orders/index.es.js +6 -0
  159. package/lib/pages/cms/orders/server-actions.cjs.js +1 -1
  160. package/lib/pages/cms/orders/server-actions.es.js +60 -51
  161. package/lib/pages/cms/payments/PaymentsClient.cjs.js +1 -1
  162. package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
  163. package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
  164. package/lib/pages/cms/payments/PaymentsPage.cjs.js +1 -1
  165. package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
  166. package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
  167. package/lib/pages/cms/payments/actions.cjs.js +1 -1
  168. package/lib/pages/cms/payments/actions.es.js +38 -48
  169. package/lib/pages/cms/payments/index.cjs.js +1 -0
  170. package/lib/pages/cms/payments/index.es.js +3 -0
  171. package/lib/pages/cms/payments/queries.cjs.js +1 -1
  172. package/lib/pages/cms/payments/queries.es.js +38 -48
  173. package/lib/pages/cms/products/ProductsPage.cjs.js +1 -1
  174. package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
  175. package/lib/pages/cms/products/ProductsPage.es.js +63 -66
  176. package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
  177. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +1 -1
  178. package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +138 -155
  179. package/lib/pages/cms/products/actions.cjs.js +4 -4
  180. package/lib/pages/cms/products/actions.es.js +121 -162
  181. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +1 -1
  182. package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
  183. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
  184. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +1 -1
  185. package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
  186. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
  187. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +1 -1
  188. package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
  189. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
  190. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +1 -1
  191. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
  192. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +1 -1
  193. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
  194. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +1 -1
  195. package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
  196. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
  197. package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +1 -1
  198. package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
  199. package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
  200. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +1 -1
  201. package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
  202. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
  203. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +1 -1
  204. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
  205. package/lib/pages/cms/products/components/ProductForm.cjs.js +1 -1
  206. package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
  207. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +1 -1
  208. package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
  209. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +1 -1
  210. package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
  211. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
  212. package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +1 -1
  213. package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
  214. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
  215. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +1 -1
  216. package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
  217. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
  218. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +2 -2
  219. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
  220. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
  221. package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
  222. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +1 -1
  223. package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
  224. package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
  225. package/lib/pages/cms/products/index.cjs.js +1 -0
  226. package/lib/pages/cms/products/index.es.js +8 -0
  227. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +1 -1
  228. package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
  229. package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
  230. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +2 -2
  231. package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
  232. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
  233. package/lib/pages/cms/products/inventory/actions.cjs.js +3 -3
  234. package/lib/pages/cms/products/inventory/actions.es.js +83 -91
  235. package/lib/pages/cms/products/new/NewProductPage.cjs.js +1 -1
  236. package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
  237. package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
  238. package/lib/pages/cms/products/product-price-sync.cjs.js +1 -1
  239. package/lib/pages/cms/products/product-price-sync.es.js +74 -89
  240. package/lib/pages/cms/products/server-actions.cjs.js +1 -1
  241. package/lib/pages/cms/products/server-actions.es.js +250 -233
  242. package/lib/pages/cms/shipping/ShippingPage.cjs.js +2 -2
  243. package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
  244. package/lib/pages/cms/shipping/components/RateForm.cjs.js +1 -1
  245. package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
  246. package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
  247. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +1 -1
  248. package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
  249. package/lib/pages/cms/shipping/index.cjs.js +1 -0
  250. package/lib/pages/cms/shipping/index.es.js +3 -0
  251. package/lib/pages/cms/shipping/server-actions.cjs.js +1 -1
  252. package/lib/pages/cms/shipping/server-actions.es.js +131 -149
  253. package/lib/pages/cms/taxes/TaxesPage.cjs.js +1 -1
  254. package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
  255. package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
  256. package/lib/pages/cms/taxes/actions.cjs.js +1 -1
  257. package/lib/pages/cms/taxes/actions.es.js +41 -53
  258. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +1 -1
  259. package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
  260. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
  261. package/lib/pages/cms/taxes/index.cjs.js +1 -0
  262. package/lib/pages/cms/taxes/index.es.js +3 -0
  263. package/lib/payment-config.cjs.js +1 -1
  264. package/lib/payment-config.es.js +110 -126
  265. package/lib/product-actions.cjs.js +4 -4
  266. package/lib/product-actions.es.js +289 -544
  267. package/lib/product-context.cjs.js +1 -1
  268. package/lib/product-context.es.js +13 -15
  269. package/lib/product-schema.cjs.js +1 -1
  270. package/lib/product-schema.es.js +99 -134
  271. package/lib/providers/freemius.cjs.js +1 -5
  272. package/lib/providers/freemius.es.js +446 -530
  273. package/lib/providers/stripe.cjs.js +1 -1
  274. package/lib/providers/stripe.es.js +417 -477
  275. package/lib/server-actions/coupon-actions.cjs.js +1 -1
  276. package/lib/server-actions/coupon-actions.es.js +22 -22
  277. package/lib/server-actions/customer-actions.cjs.js +1 -1
  278. package/lib/server-actions/customer-actions.es.js +26 -28
  279. package/lib/server-actions/product-actions.cjs.js +1 -1
  280. package/lib/server-actions/product-actions.es.js +9 -15
  281. package/lib/server-actions/shipping-actions.cjs.js +1 -1
  282. package/lib/server-actions/shipping-actions.es.js +27 -24
  283. package/lib/server-actions/tax-actions.cjs.js +1 -1
  284. package/lib/server-actions/tax-actions.es.js +33 -39
  285. package/lib/shared-inventory.cjs.js +2 -2
  286. package/lib/shared-inventory.es.js +111 -160
  287. package/lib/shipping/resolver.cjs.js +2 -2
  288. package/lib/shipping/resolver.es.js +44 -61
  289. package/lib/shipping-rate-currency.cjs.js +1 -1
  290. package/lib/shipping-rate-currency.es.js +52 -67
  291. package/lib/states.cjs.js +1 -1
  292. package/lib/states.es.js +333 -154
  293. package/lib/stripe/checkout.cjs.js +1 -1
  294. package/lib/stripe/checkout.es.js +125 -181
  295. package/lib/stripe/client.cjs.js +1 -1
  296. package/lib/stripe/client.es.js +14 -19
  297. package/lib/stripe/order-sync.cjs.js +1 -1
  298. package/lib/stripe/order-sync.es.js +106 -126
  299. package/lib/stripe/webhooks.cjs.js +1 -1
  300. package/lib/stripe/webhooks.es.js +37 -31
  301. package/lib/tax-calculation.cjs.js +1 -1
  302. package/lib/tax-calculation.es.js +84 -98
  303. package/lib/trials.cjs.js +1 -1
  304. package/lib/trials.es.js +24 -30
  305. package/lib/types.cjs.js +1 -1
  306. package/lib/types.es.js +21 -27
  307. package/lib/use-cart.cjs.js +1 -1
  308. package/lib/use-cart.es.js +38 -40
  309. package/lib/use-price-formatter.cjs.js +1 -1
  310. package/lib/use-price-formatter.es.js +10 -11
  311. package/lib/variation-utils.cjs.js +1 -1
  312. package/lib/variation-utils.es.js +199 -261
  313. package/lib/zod-config.cjs.js +1 -1
  314. package/lib/zod-config.es.js +5 -6
  315. package/package.json +16 -16
  316. package/server.cjs.js +1 -1
  317. package/server.es.js +56 -211
@@ -1,71 +1,55 @@
1
- 'use server';
2
- import { createClient as g } from "@nextblock-cms/db/server";
3
- const m = 20;
4
- async function q(n = 1, i, s) {
5
- const d = await g(), t = (n - 1) * m, l = t + m - 1;
6
- let o = d.from("orders").select(
7
- `
8
- *,
9
- order_items (*)
10
- `,
11
- { count: "exact" }
12
- ).order("created_at", { ascending: !1 }).range(t, l);
13
- i && i !== "all" && (o = o.eq("status", i)), s && (o = o.or(`id.eq.${s},user_id.eq.${s}`));
14
- const { data: u, error: f, count: r } = await o;
15
- if (f)
16
- throw console.error("Error fetching orders:", f), new Error("Failed to fetch orders");
17
- const e = u || [], c = Array.from(new Set(e.map((a) => a.user_id).filter(Boolean))), p = /* @__PURE__ */ new Map();
18
- if (c.length > 0) {
19
- const { data: a, error: w } = await d.from("profiles").select("*").in("id", c);
20
- !w && a && a.forEach((_) => p.set(_.id, _));
21
- }
22
- return {
23
- data: e.map((a) => ({
24
- ...a,
25
- customer: a.user_id ? p.get(a.user_id) : null
26
- })),
27
- total: r || 0,
28
- totalPages: r ? Math.ceil(r / m) : 0
29
- };
1
+ "use server";
2
+ import { createClient as e } from "@nextblock-cms/db/server";
3
+ //#region libs/ecommerce/src/lib/pages/cms/orders/actions.ts
4
+ var t = 20;
5
+ async function n(n = 1, r, i) {
6
+ let a = await e(), o = (n - 1) * t, s = o + t - 1, c = a.from("orders").select("\n *,\n order_items (*)\n ", { count: "exact" }).order("created_at", { ascending: !1 }).range(o, s);
7
+ r && r !== "all" && (c = c.eq("status", r)), i && (c = c.or(`id.eq.${i},user_id.eq.${i}`));
8
+ let { data: l, error: u, count: d } = await c;
9
+ if (u) throw console.error("Error fetching orders:", u), Error("Failed to fetch orders");
10
+ let f = l || [], p = Array.from(new Set(f.map((e) => e.user_id).filter(Boolean))), m = /* @__PURE__ */ new Map();
11
+ if (p.length > 0) {
12
+ let { data: e, error: t } = await a.from("profiles").select("*").in("id", p);
13
+ !t && e && e.forEach((e) => m.set(e.id, e));
14
+ }
15
+ return {
16
+ data: f.map((e) => ({
17
+ ...e,
18
+ customer: e.user_id ? m.get(e.user_id) : null
19
+ })),
20
+ total: d || 0,
21
+ totalPages: d ? Math.ceil(d / t) : 0
22
+ };
30
23
  }
31
- async function M(n) {
32
- const i = await g(), { data: s, error: d } = await i.from("orders").select(
33
- `
34
- *,
35
- order_items (*)
36
- `
37
- ).eq("id", n).single();
38
- if (d || !s)
39
- return console.error(`Error fetching order ${n}:`, d), null;
40
- const t = s;
41
- let l = null;
42
- if (t.user_id) {
43
- const { data: r } = await i.from("profiles").select("*").eq("id", t.user_id).single();
44
- l = r;
45
- }
46
- const o = t.order_items.map((r) => r.product_id).filter(Boolean), u = /* @__PURE__ */ new Map();
47
- if (o.length > 0) {
48
- const { data: r } = await i.from("products").select("id, title, slug, product_media(media(file_path))").in("id", o);
49
- r && r.forEach((e) => {
50
- let c = null;
51
- e.product_media && e.product_media.length > 0 && e.product_media[0].media && (c = e.product_media[0].media.file_path), u.set(e.id, {
52
- title: e.title,
53
- slug: e.slug,
54
- image_url: c
55
- });
56
- });
57
- }
58
- const f = t.order_items.map((r) => ({
59
- ...r,
60
- product: r.product_id ? u.get(r.product_id) : null
61
- }));
62
- return {
63
- ...t,
64
- order_items: f,
65
- customer: l
66
- };
24
+ async function r(t) {
25
+ let n = await e(), { data: r, error: i } = await n.from("orders").select("\n *,\n order_items (*)\n ").eq("id", t).single();
26
+ if (i || !r) return console.error(`Error fetching order ${t}:`, i), null;
27
+ let a = r, o = null;
28
+ if (a.user_id) {
29
+ let { data: e } = await n.from("profiles").select("*").eq("id", a.user_id).single();
30
+ o = e;
31
+ }
32
+ let s = a.order_items.map((e) => e.product_id).filter(Boolean), c = /* @__PURE__ */ new Map();
33
+ if (s.length > 0) {
34
+ let { data: e } = await n.from("products").select("id, title, slug, product_media(media(file_path))").in("id", s);
35
+ e && e.forEach((e) => {
36
+ let t = null;
37
+ e.product_media && e.product_media.length > 0 && e.product_media[0].media && (t = e.product_media[0].media.file_path), c.set(e.id, {
38
+ title: e.title,
39
+ slug: e.slug,
40
+ image_url: t
41
+ });
42
+ });
43
+ }
44
+ let l = a.order_items.map((e) => ({
45
+ ...e,
46
+ product: e.product_id ? c.get(e.product_id) : null
47
+ }));
48
+ return {
49
+ ...a,
50
+ order_items: l,
51
+ customer: o
52
+ };
67
53
  }
68
- export {
69
- M as getOrderDetails,
70
- q as getOrders
71
- };
54
+ //#endregion
55
+ export { r as getOrderDetails, n as getOrders };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("@nextblock-cms/db/server");async function f(o,s){const i=l.createClient();let r=i.from("orders").select("*, order_items(*)");if(o&&(r=r.gte("created_at",o)),s){const e=new Date(s);e.setHours(23,59,59,999),r=r.lte("created_at",e.toISOString())}const{data:t,error:a}=await r.order("created_at",{ascending:!0});if(a)throw console.error("Error fetching report data:",a),new Error(`Failed to fetch report data: ${a.message}`);if(!t||t.length===0)return[];const n=Array.from(new Set(t.map(e=>e.user_id).filter(Boolean))),c=new Map;if(n.length>0){const{data:e}=await i.from("profiles").select("id, full_name, email").in("id",n);e&&e.forEach(d=>c.set(d.id,d))}return t.map(e=>({...e,customer:e.user_id?c.get(e.user_id):null}))}exports.fetchOrderReportData=f;
1
+ "use server";let e=require("@nextblock-cms/db/server");async function t(t,n){let r=(0,e.createClient)(),i=r.from(`orders`).select(`*, order_items(*)`);if(t&&(i=i.gte(`created_at`,t)),n){let e=new Date(n);e.setHours(23,59,59,999),i=i.lte(`created_at`,e.toISOString())}let{data:a,error:o}=await i.order(`created_at`,{ascending:!0});if(o)throw console.error(`Error fetching report data:`,o),Error(`Failed to fetch report data: ${o.message}`);if(!a||a.length===0)return[];let s=Array.from(new Set(a.map(e=>e.user_id).filter(Boolean))),c=new Map;if(s.length>0){let{data:e}=await r.from(`profiles`).select(`id, full_name, email`).in(`id`,s);e&&e.forEach(e=>c.set(e.id,e))}return a.map(e=>({...e,customer:e.user_id?c.get(e.user_id):null}))}exports.fetchOrderReportData=t;
@@ -1,27 +1,24 @@
1
- 'use server';
2
- import { createClient as d } from "@nextblock-cms/db/server";
3
- async function u(a, s) {
4
- const i = d();
5
- let r = i.from("orders").select("*, order_items(*)");
6
- if (a && (r = r.gte("created_at", a)), s) {
7
- const e = new Date(s);
8
- e.setHours(23, 59, 59, 999), r = r.lte("created_at", e.toISOString());
9
- }
10
- const { data: t, error: o } = await r.order("created_at", { ascending: !0 });
11
- if (o)
12
- throw console.error("Error fetching report data:", o), new Error(`Failed to fetch report data: ${o.message}`);
13
- if (!t || t.length === 0)
14
- return [];
15
- const n = Array.from(new Set(t.map((e) => e.user_id).filter(Boolean))), c = /* @__PURE__ */ new Map();
16
- if (n.length > 0) {
17
- const { data: e } = await i.from("profiles").select("id, full_name, email").in("id", n);
18
- e && e.forEach((f) => c.set(f.id, f));
19
- }
20
- return t.map((e) => ({
21
- ...e,
22
- customer: e.user_id ? c.get(e.user_id) : null
23
- }));
1
+ "use server";
2
+ import { createClient as e } from "@nextblock-cms/db/server";
3
+ //#region libs/ecommerce/src/lib/pages/cms/orders/export-actions.ts
4
+ async function t(t, n) {
5
+ let r = e(), i = r.from("orders").select("*, order_items(*)");
6
+ if (t && (i = i.gte("created_at", t)), n) {
7
+ let e = new Date(n);
8
+ e.setHours(23, 59, 59, 999), i = i.lte("created_at", e.toISOString());
9
+ }
10
+ let { data: a, error: o } = await i.order("created_at", { ascending: !0 });
11
+ if (o) throw console.error("Error fetching report data:", o), Error(`Failed to fetch report data: ${o.message}`);
12
+ if (!a || a.length === 0) return [];
13
+ let s = Array.from(new Set(a.map((e) => e.user_id).filter(Boolean))), c = /* @__PURE__ */ new Map();
14
+ if (s.length > 0) {
15
+ let { data: e } = await r.from("profiles").select("id, full_name, email").in("id", s);
16
+ e && e.forEach((e) => c.set(e.id, e));
17
+ }
18
+ return a.map((e) => ({
19
+ ...e,
20
+ customer: e.user_id ? c.get(e.user_id) : null
21
+ }));
24
22
  }
25
- export {
26
- u as fetchOrderReportData
27
- };
23
+ //#endregion
24
+ export { t as fetchOrderReportData };
@@ -0,0 +1 @@
1
+ const e=require("./actions.cjs.js"),t=require("./export-actions.cjs.js"),n=require("./ExportReportsDialog.cjs.js"),r=require("./OrdersPage.cjs.js"),i=require("./OrderDetailPage.cjs.js");exports.ExportReportsDialog=n.ExportReportsDialog,exports.OrderDetailPage=i.OrderDetailPage,exports.OrdersPage=r.OrdersPage,exports.fetchOrderReportData=t.fetchOrderReportData,exports.getOrderDetails=e.getOrderDetails,exports.getOrders=e.getOrders;
@@ -0,0 +1,6 @@
1
+ import { getOrderDetails as e, getOrders as t } from "./actions.es.js";
2
+ import { fetchOrderReportData as n } from "./export-actions.es.js";
3
+ import { ExportReportsDialog as r } from "./ExportReportsDialog.es.js";
4
+ import { OrdersPage as i } from "./OrdersPage.es.js";
5
+ import { OrderDetailPage as a } from "./OrderDetailPage.es.js";
6
+ export { r as ExportReportsDialog, a as OrderDetailPage, i as OrdersPage, n as fetchOrderReportData, e as getOrderDetails, t as getOrders };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@nextblock-cms/db/server"),u=require("@supabase/supabase-js"),c=require("../../../order-inventory.cjs.js"),d=require("../../../invoice-server.cjs.js"),l=["pending","trial","paid","shipped","cancelled","refunded"];async function f(){const r=i.createClient(),{data:{user:e},error:t}=await r.auth.getUser();if(t||!e)return{error:"Unauthorized"};const{data:s,error:a}=await r.from("profiles").select("role").eq("id",e.id).single();return a||!s||!["ADMIN","WRITER"].includes(s.role)?{error:"Forbidden"}:{supabase:r,user:e}}function p(){const r=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY,e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL;if(!r||!e)throw new Error("Server configuration error");return u.createClient(e,r,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function E(r,e){const t=await f();if("error"in t)return{success:!1,error:t.error};if(!l.includes(e))return{success:!1,error:"Invalid order status"};let s;try{s=p()}catch(n){return{success:!1,error:n instanceof Error?n.message:"Server configuration error"}}const{data:a,error:o}=await s.from("orders").update({status:e}).eq("id",r).select();return o?(console.error("Order status update error:",o),{success:!1,error:o.message}):!a||a.length===0?{success:!1,error:"Order not found or update failed."}:(e==="paid"&&(await d.assignInvoiceMetadata({orderId:r,client:s}),await c.applyOrderInventoryDeduction(s,r)),{success:!0})}exports.updateOrderStatus=E;
1
+ "use server";const e=require("../../../order-inventory.cjs.js"),t=require("../../../invoice-server.cjs.js");let n=require("@nextblock-cms/db/server"),r=require("@supabase/supabase-js");var i=[`pending`,`trial`,`paid`,`shipped`,`cancelled`,`refunded`];async function a(){let e=(0,n.createClient)(),{data:{user:t},error:r}=await e.auth.getUser();if(r||!t)return{error:`Unauthorized`};let{data:i,error:a}=await e.from(`profiles`).select(`role`).eq(`id`,t.id).single();return a||!i||![`ADMIN`,`WRITER`].includes(i.role)?{error:`Forbidden`}:{supabase:e,user:t}}function o(){let e=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY,t=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL;if(!e||!t)throw Error(`Server configuration error`);return(0,r.createClient)(t,e,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function s(n,r){let s=await a();if(`error`in s)return{success:!1,error:s.error};if(!i.includes(r))return{success:!1,error:`Invalid order status`};let c;try{c=o()}catch(e){return{success:!1,error:e instanceof Error?e.message:`Server configuration error`}}let{data:l,error:u}=await c.from(`orders`).update({status:r}).eq(`id`,n).select();return u?(console.error(`Order status update error:`,u),{success:!1,error:u.message}):!l||l.length===0?{success:!1,error:`Order not found or update failed.`}:(r===`paid`&&(await t.assignInvoiceMetadata({orderId:n,client:c}),await e.applyOrderInventoryDeduction(c,n)),{success:!0})}exports.updateOrderStatus=s;
@@ -1,55 +1,64 @@
1
- 'use server';
2
- import { createClient as i } from "@nextblock-cms/db/server";
3
- import { createClient as c } from "@supabase/supabase-js";
4
- import { applyOrderInventoryDeduction as u } from "../../../order-inventory.es.js";
5
- import { assignInvoiceMetadata as d } from "../../../invoice-server.es.js";
6
- const f = [
7
- "pending",
8
- "trial",
9
- "paid",
10
- "shipped",
11
- "cancelled",
12
- "refunded"
1
+ "use server";
2
+ import { applyOrderInventoryDeduction as e } from "../../../order-inventory.es.js";
3
+ import { assignInvoiceMetadata as t } from "../../../invoice-server.es.js";
4
+ import { createClient as n } from "@nextblock-cms/db/server";
5
+ import { createClient as r } from "@supabase/supabase-js";
6
+ //#region libs/ecommerce/src/lib/pages/cms/orders/server-actions.ts
7
+ var i = [
8
+ "pending",
9
+ "trial",
10
+ "paid",
11
+ "shipped",
12
+ "cancelled",
13
+ "refunded"
13
14
  ];
14
- async function l() {
15
- const r = i(), { data: { user: e }, error: t } = await r.auth.getUser();
16
- if (t || !e)
17
- return { error: "Unauthorized" };
18
- const { data: s, error: a } = await r.from("profiles").select("role").eq("id", e.id).single();
19
- return a || !s || !["ADMIN", "WRITER"].includes(s.role) ? { error: "Forbidden" } : { supabase: r, user: e };
15
+ async function a() {
16
+ let e = n(), { data: { user: t }, error: r } = await e.auth.getUser();
17
+ if (r || !t) return { error: "Unauthorized" };
18
+ let { data: i, error: a } = await e.from("profiles").select("role").eq("id", t.id).single();
19
+ return a || !i || !["ADMIN", "WRITER"].includes(i.role) ? { error: "Forbidden" } : {
20
+ supabase: e,
21
+ user: t
22
+ };
20
23
  }
21
- function p() {
22
- const r = process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.SUPABASE_SECRET_KEY, e = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;
23
- if (!r || !e)
24
- throw new Error("Server configuration error");
25
- return c(e, r, {
26
- auth: {
27
- autoRefreshToken: !1,
28
- persistSession: !1
29
- }
30
- });
24
+ function o() {
25
+ let e = process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.SUPABASE_SECRET_KEY, t = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;
26
+ if (!e || !t) throw Error("Server configuration error");
27
+ return r(t, e, { auth: {
28
+ autoRefreshToken: !1,
29
+ persistSession: !1
30
+ } });
31
31
  }
32
- async function R(r, e) {
33
- const t = await l();
34
- if ("error" in t)
35
- return { success: !1, error: t.error };
36
- if (!f.includes(e))
37
- return { success: !1, error: "Invalid order status" };
38
- let s;
39
- try {
40
- s = p();
41
- } catch (n) {
42
- return {
43
- success: !1,
44
- error: n instanceof Error ? n.message : "Server configuration error"
45
- };
46
- }
47
- const { data: a, error: o } = await s.from("orders").update({ status: e }).eq("id", r).select();
48
- return o ? (console.error("Order status update error:", o), { success: !1, error: o.message }) : !a || a.length === 0 ? { success: !1, error: "Order not found or update failed." } : (e === "paid" && (await d({
49
- orderId: r,
50
- client: s
51
- }), await u(s, r)), { success: !0 });
32
+ async function s(n, r) {
33
+ let s = await a();
34
+ if ("error" in s) return {
35
+ success: !1,
36
+ error: s.error
37
+ };
38
+ if (!i.includes(r)) return {
39
+ success: !1,
40
+ error: "Invalid order status"
41
+ };
42
+ let c;
43
+ try {
44
+ c = o();
45
+ } catch (e) {
46
+ return {
47
+ success: !1,
48
+ error: e instanceof Error ? e.message : "Server configuration error"
49
+ };
50
+ }
51
+ let { data: l, error: u } = await c.from("orders").update({ status: r }).eq("id", n).select();
52
+ return u ? (console.error("Order status update error:", u), {
53
+ success: !1,
54
+ error: u.message
55
+ }) : !l || l.length === 0 ? {
56
+ success: !1,
57
+ error: "Order not found or update failed."
58
+ } : (r === "paid" && (await t({
59
+ orderId: n,
60
+ client: c
61
+ }), await e(c, n)), { success: !0 });
52
62
  }
53
- export {
54
- R as updateOrderStatus
55
- };
63
+ //#endregion
64
+ export { s as updateOrderStatus };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),N=require("next/navigation"),r=require("@nextblock-cms/ui"),f=require("lucide-react"),k=require("react-dom");function C({initialEnabledProviders:s,configStatus:i,credentials:t,saveAction:a,saveCredentialsAction:o}){const n=N.useRouter(),[m,x]=b.useTransition(),c=i.stripe.hasKeys,p=i.freemius.hasKeys,[u,j]=b.useState(()=>({stripe:s.stripe&&c,freemius:s.freemius&&p}));function g(){const l=new FormData;l.set("stripe_enabled",u.stripe?"true":"false"),l.set("freemius_enabled",u.freemius?"true":"false"),x(async()=>{await a(l),n.refresh()})}return e.jsxs("div",{className:"max-w-7xl space-y-4 p-4 sm:p-6",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Payment Settings"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Enter your provider API keys, then enable the providers your store needs. Physical products use Stripe and digital products use Freemius."})]}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,3fr)_minmax(20rem,2fr)]",children:[e.jsx(w,{credentials:t,saveAction:o}),e.jsxs(r.Card,{className:"flex h-full flex-col",children:[e.jsxs(r.CardHeader,{className:"pb-3",children:[e.jsx(r.CardTitle,{children:"Payment Providers"}),e.jsx(r.CardDescription,{children:"You can run both providers at the same time. Each product picks its provider from its product type."})]}),e.jsxs(r.CardContent,{className:"flex flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx(y,{id:"stripe-enabled",label:"Stripe for Physical Products",description:"Use Stripe Checkout for physical merchandise and other shippable goods.",checked:u.stripe,disabled:!c,onCheckedChange:l=>j(h=>({...h,stripe:l})),ready:c,children:c?e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-green-600",children:[e.jsx(f.CheckCircle2,{className:"h-4 w-4"}),e.jsx("span",{children:"Ready for physical product checkout"})]}):e.jsx(v,{provider:"Stripe",missingKeys:i.stripe.missing,docsUrl:"https://dashboard.stripe.com/apikeys",docsLabel:"Stripe API keys"})}),e.jsx(y,{id:"freemius-enabled",label:"Freemius for Digital Products",description:"Use Freemius for software licenses, SaaS plans, and other digital products.",checked:u.freemius,disabled:!p,onCheckedChange:l=>j(h=>({...h,freemius:l})),ready:p,children:p?e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-green-600",children:[e.jsx(f.CheckCircle2,{className:"h-4 w-4"}),e.jsx("span",{children:"Ready for digital product checkout"})]}):e.jsx(v,{provider:"Freemius",missingKeys:i.freemius.missing,docsUrl:"https://dashboard.freemius.com/",docsLabel:"Freemius credentials"})})]}),e.jsx("div",{className:"mt-auto flex justify-end border-t pt-4",children:e.jsx(r.Button,{type:"button",disabled:m,onClick:g,children:m?"Saving...":"Save Changes"})})]})]})]})]})}function S(){const{pending:s}=k.useFormStatus();return e.jsx(r.Button,{type:"submit",disabled:s,children:s?"Saving...":"Save Changes"})}function d({id:s,label:i,type:t="text",defaultValue:a,placeholder:o,hint:n}){return e.jsxs("div",{className:"space-y-1",children:[e.jsx(r.Label,{htmlFor:s,className:"text-xs",children:i}),e.jsx(r.Input,{id:s,name:s,type:t,defaultValue:a,placeholder:o,autoComplete:t==="password"?"new-password":"off"}),n&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n})]})}function w({credentials:s,saveAction:i}){const t="•••••••• (stored — leave blank to keep)";return e.jsxs(r.Card,{className:"flex h-full flex-col",children:[e.jsxs(r.CardHeader,{className:"pb-3",children:[e.jsx(r.CardTitle,{children:"Provider API Keys"}),e.jsxs(r.CardDescription,{children:["Keys are encrypted at rest and used DB-first (these override any"," ",e.jsx("code",{children:".env"})," values). Leave a secret blank to keep the stored value."]})]}),e.jsx(r.CardContent,{className:"flex flex-1 flex-col",children:e.jsxs("form",{action:i,className:"flex flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Stripe (physical products)"}),e.jsxs("details",{className:"rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground",children:[e.jsx("summary",{className:"cursor-pointer font-medium text-foreground",children:"Stripe webhook setup"}),e.jsxs("div",{className:"mt-2 space-y-1.5",children:[e.jsxs("p",{children:["In Stripe, add"," ",e.jsx("code",{children:"https://your-domain/api/webhooks/stripe"})," as a webhook endpoint and paste its ",e.jsx("code",{children:"whsec_…"})," signing secret below."]}),e.jsxs("p",{children:["Locally, run"," ",e.jsx("code",{children:"stripe listen --forward-to localhost:4200/api/webhooks/stripe"})," ","or ",e.jsx("code",{children:"npm run stripe"}),"."]})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsx(d,{id:"stripe_publishableKey",label:"Publishable key",defaultValue:s.stripe.publishableKey,placeholder:"pk_live_…"}),e.jsx(d,{id:"stripe_secretKey",label:"Secret key",type:"password",placeholder:s.stripe.hasSecretKey?t:"sk_live_…"}),e.jsx(d,{id:"stripe_webhookSecret",label:"Webhook signing secret",type:"password",placeholder:s.stripe.hasWebhookSecret?t:"whsec_…"})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Freemius (digital products)"}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[e.jsx(d,{id:"freemius_developerId",label:"Developer ID",defaultValue:s.freemius.developerId}),e.jsx(d,{id:"freemius_productId",label:"Product ID",defaultValue:s.freemius.productId}),e.jsx(d,{id:"freemius_publicKey",label:"Public key",defaultValue:s.freemius.publicKey,placeholder:"pk_…"}),e.jsx(d,{id:"freemius_secretKey",label:"Secret key",type:"password",placeholder:s.freemius.hasSecretKey?t:"sk_…"}),e.jsx(d,{id:"freemius_apiKey",label:"API key",type:"password",placeholder:s.freemius.hasApiKey?t:"API key"})]})]}),s.envFallbackActive&&e.jsx("p",{className:"text-xs text-amber-700",children:"Stripe keys are currently read from environment variables. Saving here moves them into the database and takes precedence."}),e.jsx("div",{className:"mt-auto flex justify-end border-t pt-4",children:e.jsx(S,{})})]})})]})}function y({id:s,label:i,description:t,checked:a,disabled:o,ready:n,onCheckedChange:m,children:x}){return e.jsx("div",{className:"rounded-md border p-3",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(r.Checkbox,{id:s,checked:a,disabled:o,onCheckedChange:c=>m(!!c),className:"mt-1"}),e.jsxs("div",{className:"grid gap-1.5 leading-none w-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsx(r.Label,{htmlFor:s,className:"font-semibold text-base cursor-pointer",children:i}),e.jsx("span",{className:`text-xs font-medium ${a?"text-foreground":"text-muted-foreground"}`,children:a?"Enabled":"Disabled"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t}),!n&&e.jsx("p",{className:"text-xs text-amber-700",children:"Add all required credentials before enabling this provider."}),x]})]})})}function v({provider:s,missingKeys:i,docsUrl:t,docsLabel:a}){return e.jsxs("div",{className:"mt-2 rounded-md border border-destructive/20 bg-destructive/5 p-3 text-xs text-foreground",children:[e.jsxs("div",{className:"mb-1.5 flex items-center gap-2 font-semibold text-destructive",children:[e.jsx(f.AlertCircle,{className:"h-4 w-4"}),e.jsx("span",{children:"Configuration Required"})]}),e.jsxs("p",{children:[s," needs ",e.jsx("strong",{children:i.join(", ")}),". Add them in Provider API Keys, save, then enable the provider."," ",e.jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"font-medium underline hover:text-destructive/80",children:["Open ",a]}),"."]})]})}exports.PaymentsClient=C;
1
+ "use client";let e=require("react"),t=require("lucide-react"),n=require("react/jsx-runtime"),r=require("next/navigation"),i=require("@nextblock-cms/ui"),a=require("react-dom");function o({initialEnabledProviders:a,configStatus:o,credentials:s,saveAction:c,saveCredentialsAction:f}){let p=(0,r.useRouter)(),[m,h]=(0,e.useTransition)(),g=o.stripe.hasKeys,_=o.freemius.hasKeys,[v,y]=(0,e.useState)(()=>({stripe:a.stripe&&g,freemius:a.freemius&&_}));function b(){let e=new FormData;e.set(`stripe_enabled`,v.stripe?`true`:`false`),e.set(`freemius_enabled`,v.freemius?`true`:`false`),h(async()=>{await c(e),p.refresh()})}return(0,n.jsxs)(`div`,{className:`max-w-7xl space-y-4 p-4 sm:p-6`,children:[(0,n.jsxs)(`div`,{className:`space-y-1`,children:[(0,n.jsx)(`h1`,{className:`text-2xl font-bold tracking-tight`,children:`Payment Settings`}),(0,n.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Enter your provider API keys, then enable the providers your store needs. Physical products use Stripe and digital products use Freemius.`})]}),(0,n.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-[minmax(0,3fr)_minmax(20rem,2fr)]`,children:[(0,n.jsx)(l,{credentials:s,saveAction:f}),(0,n.jsxs)(i.Card,{className:`flex h-full flex-col`,children:[(0,n.jsxs)(i.CardHeader,{className:`pb-3`,children:[(0,n.jsx)(i.CardTitle,{children:`Payment Providers`}),(0,n.jsx)(i.CardDescription,{children:`You can run both providers at the same time. Each product picks its provider from its product type.`})]}),(0,n.jsxs)(i.CardContent,{className:`flex flex-1 flex-col gap-4`,children:[(0,n.jsxs)(`div`,{className:`space-y-3`,children:[(0,n.jsx)(u,{id:`stripe-enabled`,label:`Stripe for Physical Products`,description:`Use Stripe Checkout for physical merchandise and other shippable goods.`,checked:v.stripe,disabled:!g,onCheckedChange:e=>y(t=>({...t,stripe:e})),ready:g,children:g?(0,n.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-green-600`,children:[(0,n.jsx)(t.CheckCircle2,{className:`h-4 w-4`}),(0,n.jsx)(`span`,{children:`Ready for physical product checkout`})]}):(0,n.jsx)(d,{provider:`Stripe`,missingKeys:o.stripe.missing,docsUrl:`https://dashboard.stripe.com/apikeys`,docsLabel:`Stripe API keys`})}),(0,n.jsx)(u,{id:`freemius-enabled`,label:`Freemius for Digital Products`,description:`Use Freemius for software licenses, SaaS plans, and other digital products.`,checked:v.freemius,disabled:!_,onCheckedChange:e=>y(t=>({...t,freemius:e})),ready:_,children:_?(0,n.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-green-600`,children:[(0,n.jsx)(t.CheckCircle2,{className:`h-4 w-4`}),(0,n.jsx)(`span`,{children:`Ready for digital product checkout`})]}):(0,n.jsx)(d,{provider:`Freemius`,missingKeys:o.freemius.missing,docsUrl:`https://dashboard.freemius.com/`,docsLabel:`Freemius credentials`})})]}),(0,n.jsx)(`div`,{className:`mt-auto flex justify-end border-t pt-4`,children:(0,n.jsx)(i.Button,{type:`button`,disabled:m,onClick:b,children:m?`Saving...`:`Save Changes`})})]})]})]})]})}function s(){let{pending:e}=(0,a.useFormStatus)();return(0,n.jsx)(i.Button,{type:`submit`,disabled:e,children:e?`Saving...`:`Save Changes`})}function c({id:e,label:t,type:r=`text`,defaultValue:a,placeholder:o,hint:s}){return(0,n.jsxs)(`div`,{className:`space-y-1`,children:[(0,n.jsx)(i.Label,{htmlFor:e,className:`text-xs`,children:t}),(0,n.jsx)(i.Input,{id:e,name:e,type:r,defaultValue:a,placeholder:o,autoComplete:r===`password`?`new-password`:`off`}),s&&(0,n.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:s})]})}function l({credentials:e,saveAction:t}){let r=`•••••••• (stored — leave blank to keep)`;return(0,n.jsxs)(i.Card,{className:`flex h-full flex-col`,children:[(0,n.jsxs)(i.CardHeader,{className:`pb-3`,children:[(0,n.jsx)(i.CardTitle,{children:`Provider API Keys`}),(0,n.jsxs)(i.CardDescription,{children:[`Keys are encrypted at rest and used DB-first (these override any`,` `,(0,n.jsx)(`code`,{children:`.env`}),` values). Leave a secret blank to keep the stored value.`]})]}),(0,n.jsx)(i.CardContent,{className:`flex flex-1 flex-col`,children:(0,n.jsxs)(`form`,{action:t,className:`flex flex-1 flex-col gap-4`,children:[(0,n.jsxs)(`div`,{className:`space-y-3`,children:[(0,n.jsx)(`h3`,{className:`text-sm font-semibold`,children:`Stripe (physical products)`}),(0,n.jsxs)(`details`,{className:`rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground`,children:[(0,n.jsx)(`summary`,{className:`cursor-pointer font-medium text-foreground`,children:`Stripe webhook setup`}),(0,n.jsxs)(`div`,{className:`mt-2 space-y-1.5`,children:[(0,n.jsxs)(`p`,{children:[`In Stripe, add`,` `,(0,n.jsx)(`code`,{children:`https://your-domain/api/webhooks/stripe`}),` as a webhook endpoint and paste its `,(0,n.jsx)(`code`,{children:`whsec_…`}),` signing secret below.`]}),(0,n.jsxs)(`p`,{children:[`Locally, run`,` `,(0,n.jsx)(`code`,{children:`stripe listen --forward-to localhost:4200/api/webhooks/stripe`}),` `,`or `,(0,n.jsx)(`code`,{children:`npm run stripe`}),`.`]})]})]}),(0,n.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,n.jsx)(c,{id:`stripe_publishableKey`,label:`Publishable key`,defaultValue:e.stripe.publishableKey,placeholder:`pk_live_…`}),(0,n.jsx)(c,{id:`stripe_secretKey`,label:`Secret key`,type:`password`,placeholder:e.stripe.hasSecretKey?r:`sk_live_…`}),(0,n.jsx)(c,{id:`stripe_webhookSecret`,label:`Webhook signing secret`,type:`password`,placeholder:e.stripe.hasWebhookSecret?r:`whsec_…`})]})]}),(0,n.jsxs)(`div`,{className:`space-y-3`,children:[(0,n.jsx)(`h3`,{className:`text-sm font-semibold`,children:`Freemius (digital products)`}),(0,n.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-3`,children:[(0,n.jsx)(c,{id:`freemius_developerId`,label:`Developer ID`,defaultValue:e.freemius.developerId}),(0,n.jsx)(c,{id:`freemius_productId`,label:`Product ID`,defaultValue:e.freemius.productId}),(0,n.jsx)(c,{id:`freemius_publicKey`,label:`Public key`,defaultValue:e.freemius.publicKey,placeholder:`pk_…`}),(0,n.jsx)(c,{id:`freemius_secretKey`,label:`Secret key`,type:`password`,placeholder:e.freemius.hasSecretKey?r:`sk_…`}),(0,n.jsx)(c,{id:`freemius_apiKey`,label:`API key`,type:`password`,placeholder:e.freemius.hasApiKey?r:`API key`})]})]}),e.envFallbackActive&&(0,n.jsx)(`p`,{className:`text-xs text-amber-700`,children:`Stripe keys are currently read from environment variables. Saving here moves them into the database and takes precedence.`}),(0,n.jsx)(`div`,{className:`mt-auto flex justify-end border-t pt-4`,children:(0,n.jsx)(s,{})})]})})]})}function u({id:e,label:t,description:r,checked:a,disabled:o,ready:s,onCheckedChange:c,children:l}){return(0,n.jsx)(`div`,{className:`rounded-md border p-3`,children:(0,n.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,n.jsx)(i.Checkbox,{id:e,checked:a,disabled:o,onCheckedChange:e=>c(!!e),className:`mt-1`}),(0,n.jsxs)(`div`,{className:`grid gap-1.5 leading-none w-full`,children:[(0,n.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,n.jsx)(i.Label,{htmlFor:e,className:`font-semibold text-base cursor-pointer`,children:t}),(0,n.jsx)(`span`,{className:`text-xs font-medium ${a?`text-foreground`:`text-muted-foreground`}`,children:a?`Enabled`:`Disabled`})]}),(0,n.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:r}),!s&&(0,n.jsx)(`p`,{className:`text-xs text-amber-700`,children:`Add all required credentials before enabling this provider.`}),l]})]})})}function d({provider:e,missingKeys:r,docsUrl:i,docsLabel:a}){return(0,n.jsxs)(`div`,{className:`mt-2 rounded-md border border-destructive/20 bg-destructive/5 p-3 text-xs text-foreground`,children:[(0,n.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-2 font-semibold text-destructive`,children:[(0,n.jsx)(t.AlertCircle,{className:`h-4 w-4`}),(0,n.jsx)(`span`,{children:`Configuration Required`})]}),(0,n.jsxs)(`p`,{children:[e,` needs `,(0,n.jsx)(`strong`,{children:r.join(`, `)}),`. Add them in Provider API Keys, save, then enable the provider.`,` `,(0,n.jsxs)(`a`,{href:i,target:`_blank`,rel:`noopener noreferrer`,className:`font-medium underline hover:text-destructive/80`,children:[`Open `,a]}),`.`]})]})}exports.PaymentsClient=o;
@@ -18,5 +18,5 @@ export declare function PaymentsClient({ initialEnabledProviders, configStatus,
18
18
  credentials: PaymentCredentialsView;
19
19
  saveAction: (formData: FormData) => Promise<void>;
20
20
  saveCredentialsAction: (formData: FormData) => Promise<void>;
21
- }): import("react").JSX.Element;
21
+ }): import('react').JSX.Element;
22
22
  export {};