@nextblock-cms/ecom 0.21.0 → 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 (359) hide show
  1. package/README.md +43 -0
  2. package/index.cjs +1 -0
  3. package/lib/CurrencyProvider.cjs +1 -0
  4. package/lib/CurrencyProvider.es.js +1 -1
  5. package/lib/PaymentReadinessProvider.cjs +1 -0
  6. package/lib/PaymentReadinessProvider.es.js +1 -1
  7. package/lib/cart-store.cjs +1 -0
  8. package/lib/cart-store.es.js +1 -1
  9. package/lib/components/AccountNavigationMenu.cjs +1 -0
  10. package/lib/components/AccountNavigationMenu.es.js +1 -1
  11. package/lib/components/AddToCartButton.cjs +1 -0
  12. package/lib/components/AddToCartButton.es.js +1 -1
  13. package/lib/components/Cart.cjs +1 -0
  14. package/lib/components/Cart.es.js +1 -1
  15. package/lib/components/CartDrawer.cjs +1 -0
  16. package/lib/components/CartDrawer.es.js +1 -1
  17. package/lib/components/CartIcon.cjs +1 -0
  18. package/lib/components/CartIcon.es.js +1 -1
  19. package/lib/components/Checkout.cjs +1 -0
  20. package/lib/components/Checkout.es.js +1 -1
  21. package/lib/components/CouponForm.cjs +1 -0
  22. package/lib/components/CouponForm.es.js +1 -1
  23. package/lib/components/CurrencySwitcher.cjs +1 -0
  24. package/lib/components/CurrencySwitcher.es.js +1 -1
  25. package/lib/components/CustomerProfileForm.cjs +1 -0
  26. package/lib/components/CustomerProfileForm.es.js +1 -1
  27. package/lib/components/FeaturedProduct.cjs +1 -0
  28. package/lib/components/FeaturedProduct.es.js +1 -1
  29. package/lib/components/FreemiusLicensePanel.cjs +1 -0
  30. package/lib/components/FreemiusLicensePanel.es.js +1 -1
  31. package/lib/components/InvoiceDocument.cjs +1 -0
  32. package/lib/components/InvoiceDocument.es.js +1 -1
  33. package/lib/components/{InvoiceViewerShell.cjs.js → InvoiceViewerShell.cjs} +1 -1
  34. package/lib/components/InvoiceViewerShell.es.js +1 -1
  35. package/lib/components/ProductCard.cjs +1 -0
  36. package/lib/components/ProductCard.es.js +1 -1
  37. package/lib/components/ProductDetailsLayout.cjs +1 -0
  38. package/lib/components/ProductDetailsLayout.es.js +1 -1
  39. package/lib/components/ProductGallery.cjs +1 -0
  40. package/lib/components/ProductGallery.es.js +1 -1
  41. package/lib/components/ProductGrid.cjs +1 -0
  42. package/lib/components/ProductGrid.es.js +1 -1
  43. package/lib/components/ShippingEstimator.cjs +1 -0
  44. package/lib/components/ShippingEstimator.es.js +1 -1
  45. package/lib/components/ShortDescription.cjs +1 -0
  46. package/lib/components/ShortDescription.es.js +1 -1
  47. package/lib/components/SimpleTiptapRenderer.cjs +1 -0
  48. package/lib/components/SimpleTiptapRenderer.es.js +1 -1
  49. package/lib/components/SubscriptionSelector.cjs +1 -0
  50. package/lib/components/SubscriptionSelector.es.js +1 -1
  51. package/lib/countries.es.js +1 -1
  52. package/lib/coupon-server.cjs +1 -0
  53. package/lib/coupon-server.es.js +1 -1
  54. package/lib/coupons.es.js +1 -1
  55. package/lib/currency-constants.es.js +1 -1
  56. package/lib/currency-rest-client.es.js +1 -1
  57. package/lib/currency-store.es.js +1 -1
  58. package/lib/currency-sync.cjs +1 -0
  59. package/lib/currency-sync.es.js +1 -1
  60. package/lib/currency.es.js +1 -1
  61. package/lib/customer-addresses.cjs +1 -0
  62. package/lib/customer-addresses.es.js +1 -1
  63. package/lib/customer-orders.cjs +1 -0
  64. package/lib/customer-orders.es.js +1 -1
  65. package/lib/customer.cjs +1 -0
  66. package/lib/customer.es.js +1 -1
  67. package/lib/export-helpers.cjs +1 -0
  68. package/lib/export-helpers.es.js +1 -1
  69. package/lib/factory.cjs +1 -0
  70. package/lib/factory.es.js +1 -1
  71. package/lib/freemius-coupons.cjs +1 -0
  72. package/lib/freemius-coupons.es.js +1 -1
  73. package/lib/freemius-license-claim.cjs +1 -0
  74. package/lib/freemius-license-claim.es.js +1 -1
  75. package/lib/freemius-license.cjs +1 -0
  76. package/lib/freemius-license.es.js +1 -1
  77. package/lib/freemius-order-sync.cjs +1 -0
  78. package/lib/freemius-order-sync.es.js +1 -1
  79. package/lib/freemius-trial-provision.cjs +1 -0
  80. package/lib/freemius-trial-provision.es.js +1 -1
  81. package/lib/inventory-settings.es.js +1 -1
  82. package/lib/{invoice-server.cjs.js → invoice-server.cjs} +1 -1
  83. package/lib/invoice-server.es.js +1 -1
  84. package/lib/invoice-ui.es.js +1 -1
  85. package/lib/invoice.es.js +1 -1
  86. package/lib/{order-inventory.cjs.js → order-inventory.cjs} +1 -1
  87. package/lib/order-inventory.es.js +1 -1
  88. package/lib/order-tax-details.es.js +1 -1
  89. package/lib/pages/cms/coupons/CouponEditorForm.cjs +1 -0
  90. package/lib/pages/cms/coupons/CouponEditorForm.es.js +1 -1
  91. package/lib/pages/cms/coupons/{CouponsPage.cjs.js → CouponsPage.cjs} +1 -1
  92. package/lib/pages/cms/coupons/CouponsPage.es.js +1 -1
  93. package/lib/pages/cms/coupons/CreateCouponDialog.cjs +1 -0
  94. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +1 -1
  95. package/lib/pages/cms/coupons/EditCouponPage.cjs +1 -0
  96. package/lib/pages/cms/coupons/EditCouponPage.es.js +1 -1
  97. package/lib/pages/cms/coupons/ProductScopePicker.es.js +1 -1
  98. package/lib/pages/cms/coupons/actions.cjs +1 -0
  99. package/lib/pages/cms/coupons/actions.es.js +1 -1
  100. package/lib/pages/cms/coupons/index.cjs +1 -0
  101. package/lib/pages/cms/coupons/product-options.es.js +1 -1
  102. package/lib/pages/cms/orders/ExportReportsDialog.cjs +1 -0
  103. package/lib/pages/cms/orders/ExportReportsDialog.es.js +1 -1
  104. package/lib/pages/cms/orders/OrderDetailPage.cjs +1 -0
  105. package/lib/pages/cms/orders/OrderDetailPage.es.js +1 -1
  106. package/lib/pages/cms/orders/OrderPrintButton.es.js +1 -1
  107. package/lib/pages/cms/orders/OrderStatusForm.cjs +1 -0
  108. package/lib/pages/cms/orders/OrderStatusForm.es.js +1 -1
  109. package/lib/pages/cms/orders/OrdersPage.cjs +1 -0
  110. package/lib/pages/cms/orders/OrdersPage.es.js +1 -1
  111. package/lib/pages/cms/orders/actions.es.js +1 -1
  112. package/lib/pages/cms/orders/export-actions.es.js +1 -1
  113. package/lib/pages/cms/orders/index.cjs +1 -0
  114. package/lib/pages/cms/orders/server-actions.cjs +1 -0
  115. package/lib/pages/cms/orders/server-actions.es.js +1 -1
  116. package/lib/pages/cms/payments/PaymentsClient.es.js +1 -1
  117. package/lib/pages/cms/payments/PaymentsPage.cjs +1 -0
  118. package/lib/pages/cms/payments/PaymentsPage.es.js +1 -1
  119. package/lib/pages/cms/payments/actions.cjs +1 -0
  120. package/lib/pages/cms/payments/actions.es.js +1 -1
  121. package/lib/pages/cms/payments/index.cjs +1 -0
  122. package/lib/pages/cms/payments/queries.cjs +1 -0
  123. package/lib/pages/cms/payments/queries.es.js +1 -1
  124. package/lib/pages/cms/products/ProductsPage.cjs +1 -0
  125. package/lib/pages/cms/products/ProductsPage.es.js +1 -1
  126. package/lib/pages/cms/products/[id]/edit/EditProductPage.cjs +1 -0
  127. package/lib/pages/cms/products/{_id_ → [id]}/edit/EditProductPage.es.js +1 -1
  128. package/lib/pages/cms/products/{actions.cjs.js → actions.cjs} +1 -1
  129. package/lib/pages/cms/products/actions.es.js +1 -1
  130. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs +1 -0
  131. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +1 -1
  132. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +1 -1
  133. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs +1 -0
  134. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +1 -1
  135. package/lib/pages/cms/products/categories/components/CategoryManager.cjs +1 -0
  136. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +1 -1
  137. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs +1 -0
  138. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +1 -1
  139. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs +1 -0
  140. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +1 -1
  141. package/lib/pages/cms/products/components/DeleteProductButton.es.js +1 -1
  142. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs +1 -0
  143. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +1 -1
  144. package/lib/pages/cms/products/components/ProductCategorySelector.cjs +1 -0
  145. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +1 -1
  146. package/lib/pages/cms/products/components/ProductForm.cjs +1 -0
  147. package/lib/pages/cms/products/components/ProductForm.es.js +1 -1
  148. package/lib/pages/cms/products/components/ProductMediaManager.cjs +1 -0
  149. package/lib/pages/cms/products/components/ProductMediaManager.es.js +1 -1
  150. package/lib/pages/cms/products/components/ProductsBulkTable.cjs +1 -0
  151. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +1 -1
  152. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +1 -1
  153. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs +1 -0
  154. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +1 -1
  155. package/lib/pages/cms/products/components/{SyncFreemiusPricingButton.cjs.js → SyncFreemiusPricingButton.cjs} +1 -1
  156. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +1 -1
  157. package/lib/pages/cms/products/components/VariationsEditor.cjs +1 -0
  158. package/lib/pages/cms/products/components/VariationsEditor.es.js +1 -1
  159. package/lib/pages/cms/products/index.cjs +1 -0
  160. package/lib/pages/cms/products/index.es.js +1 -1
  161. package/lib/pages/cms/products/inventory/InventoryPage.cjs +1 -0
  162. package/lib/pages/cms/products/inventory/InventoryPage.es.js +1 -1
  163. package/lib/pages/cms/products/inventory/{InventoryTableClient.cjs.js → InventoryTableClient.cjs} +1 -1
  164. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +1 -1
  165. package/lib/pages/cms/products/inventory/{actions.cjs.js → actions.cjs} +1 -1
  166. package/lib/pages/cms/products/inventory/actions.es.js +1 -1
  167. package/lib/pages/cms/products/new/NewProductPage.cjs +1 -0
  168. package/lib/pages/cms/products/new/NewProductPage.es.js +1 -1
  169. package/lib/pages/cms/products/product-price-sync.cjs +1 -0
  170. package/lib/pages/cms/products/product-price-sync.es.js +1 -1
  171. package/lib/pages/cms/products/server-actions.cjs +1 -0
  172. package/lib/pages/cms/products/server-actions.es.js +1 -1
  173. package/lib/pages/cms/shipping/{ShippingPage.cjs.js → ShippingPage.cjs} +1 -1
  174. package/lib/pages/cms/shipping/ShippingPage.es.js +1 -1
  175. package/lib/pages/cms/shipping/components/RateForm.cjs +1 -0
  176. package/lib/pages/cms/shipping/components/RateForm.es.js +1 -1
  177. package/lib/pages/cms/shipping/components/ZoneForm.cjs +1 -0
  178. package/lib/pages/cms/shipping/components/ZoneForm.es.js +1 -1
  179. package/lib/pages/cms/shipping/index.cjs +1 -0
  180. package/lib/pages/cms/shipping/server-actions.cjs +1 -0
  181. package/lib/pages/cms/shipping/server-actions.es.js +1 -1
  182. package/lib/pages/cms/taxes/TaxesPage.cjs +1 -0
  183. package/lib/pages/cms/taxes/TaxesPage.es.js +1 -1
  184. package/lib/pages/cms/taxes/actions.cjs +1 -0
  185. package/lib/pages/cms/taxes/actions.es.js +1 -1
  186. package/lib/pages/cms/taxes/components/TaxRateForm.cjs +1 -0
  187. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +1 -1
  188. package/lib/pages/cms/taxes/index.cjs +1 -0
  189. package/lib/payment-config.es.js +1 -1
  190. package/lib/{product-actions.cjs.js → product-actions.cjs} +1 -1
  191. package/lib/product-actions.es.js +1 -1
  192. package/lib/product-context.cjs +1 -0
  193. package/lib/product-context.es.js +1 -1
  194. package/lib/product-schema.cjs +1 -0
  195. package/lib/product-schema.es.js +1 -1
  196. package/lib/providers/freemius.cjs +1 -0
  197. package/lib/providers/freemius.es.js +1 -1
  198. package/lib/providers/stripe.cjs +1 -0
  199. package/lib/providers/stripe.es.js +1 -1
  200. package/lib/server-actions/coupon-actions.cjs +1 -0
  201. package/lib/server-actions/coupon-actions.es.js +1 -1
  202. package/lib/server-actions/customer-actions.cjs +1 -0
  203. package/lib/server-actions/customer-actions.es.js +1 -1
  204. package/lib/server-actions/product-actions.cjs +1 -0
  205. package/lib/server-actions/product-actions.es.js +1 -1
  206. package/lib/server-actions/shipping-actions.cjs +1 -0
  207. package/lib/server-actions/shipping-actions.es.js +1 -1
  208. package/lib/server-actions/tax-actions.cjs +1 -0
  209. package/lib/server-actions/tax-actions.es.js +1 -1
  210. package/lib/shared-inventory.es.js +1 -1
  211. package/lib/shipping/{resolver.cjs.js → resolver.cjs} +1 -1
  212. package/lib/shipping/resolver.es.js +1 -1
  213. package/lib/shipping-rate-currency.cjs +1 -0
  214. package/lib/shipping-rate-currency.es.js +1 -1
  215. package/lib/states.cjs +1 -0
  216. package/lib/stripe/checkout.cjs +1 -0
  217. package/lib/stripe/checkout.es.js +1 -1
  218. package/lib/stripe/client.cjs +1 -0
  219. package/lib/stripe/client.es.js +1 -1
  220. package/lib/stripe/order-sync.cjs +1 -0
  221. package/lib/stripe/order-sync.es.js +1 -1
  222. package/lib/stripe/webhooks.cjs +1 -0
  223. package/lib/stripe/webhooks.es.js +1 -1
  224. package/lib/tax-calculation.cjs +1 -0
  225. package/lib/tax-calculation.es.js +1 -1
  226. package/lib/trials.es.js +1 -1
  227. package/lib/types.es.js +1 -1
  228. package/lib/use-cart.cjs +1 -0
  229. package/lib/use-cart.es.js +1 -1
  230. package/lib/use-price-formatter.es.js +1 -1
  231. package/lib/variation-utils.cjs +1 -0
  232. package/lib/variation-utils.es.js +1 -1
  233. package/lib/zod-config.es.js +1 -1
  234. package/package.json +10 -9
  235. package/server.cjs +1 -0
  236. package/server.es.js +1 -1
  237. package/index.cjs.js +0 -1
  238. package/lib/CurrencyProvider.cjs.js +0 -1
  239. package/lib/PaymentReadinessProvider.cjs.js +0 -1
  240. package/lib/cart-store.cjs.js +0 -1
  241. package/lib/components/AccountNavigationMenu.cjs.js +0 -1
  242. package/lib/components/AddToCartButton.cjs.js +0 -1
  243. package/lib/components/Cart.cjs.js +0 -1
  244. package/lib/components/CartDrawer.cjs.js +0 -1
  245. package/lib/components/CartIcon.cjs.js +0 -1
  246. package/lib/components/Checkout.cjs.js +0 -1
  247. package/lib/components/CouponForm.cjs.js +0 -1
  248. package/lib/components/CurrencySwitcher.cjs.js +0 -1
  249. package/lib/components/CustomerProfileForm.cjs.js +0 -1
  250. package/lib/components/FeaturedProduct.cjs.js +0 -1
  251. package/lib/components/FreemiusLicensePanel.cjs.js +0 -1
  252. package/lib/components/InvoiceDocument.cjs.js +0 -1
  253. package/lib/components/ProductCard.cjs.js +0 -1
  254. package/lib/components/ProductDetailsLayout.cjs.js +0 -1
  255. package/lib/components/ProductGallery.cjs.js +0 -1
  256. package/lib/components/ProductGrid.cjs.js +0 -1
  257. package/lib/components/ShippingEstimator.cjs.js +0 -1
  258. package/lib/components/ShortDescription.cjs.js +0 -1
  259. package/lib/components/SimpleTiptapRenderer.cjs.js +0 -1
  260. package/lib/components/SubscriptionSelector.cjs.js +0 -1
  261. package/lib/coupon-server.cjs.js +0 -1
  262. package/lib/currency-sync.cjs.js +0 -1
  263. package/lib/customer-addresses.cjs.js +0 -1
  264. package/lib/customer-orders.cjs.js +0 -1
  265. package/lib/customer.cjs.js +0 -1
  266. package/lib/export-helpers.cjs.js +0 -1
  267. package/lib/factory.cjs.js +0 -1
  268. package/lib/freemius-coupons.cjs.js +0 -1
  269. package/lib/freemius-license-claim.cjs.js +0 -1
  270. package/lib/freemius-license.cjs.js +0 -1
  271. package/lib/freemius-order-sync.cjs.js +0 -1
  272. package/lib/freemius-trial-provision.cjs.js +0 -1
  273. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +0 -1
  274. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +0 -1
  275. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +0 -1
  276. package/lib/pages/cms/coupons/actions.cjs.js +0 -1
  277. package/lib/pages/cms/coupons/index.cjs.js +0 -1
  278. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +0 -1
  279. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +0 -1
  280. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +0 -1
  281. package/lib/pages/cms/orders/OrdersPage.cjs.js +0 -1
  282. package/lib/pages/cms/orders/index.cjs.js +0 -1
  283. package/lib/pages/cms/orders/server-actions.cjs.js +0 -1
  284. package/lib/pages/cms/payments/PaymentsPage.cjs.js +0 -1
  285. package/lib/pages/cms/payments/actions.cjs.js +0 -1
  286. package/lib/pages/cms/payments/index.cjs.js +0 -1
  287. package/lib/pages/cms/payments/queries.cjs.js +0 -1
  288. package/lib/pages/cms/products/ProductsPage.cjs.js +0 -1
  289. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +0 -1
  290. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +0 -1
  291. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +0 -1
  292. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +0 -1
  293. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +0 -1
  294. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +0 -1
  295. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +0 -1
  296. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +0 -1
  297. package/lib/pages/cms/products/components/ProductForm.cjs.js +0 -1
  298. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +0 -1
  299. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +0 -1
  300. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +0 -1
  301. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +0 -1
  302. package/lib/pages/cms/products/index.cjs.js +0 -1
  303. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +0 -1
  304. package/lib/pages/cms/products/new/NewProductPage.cjs.js +0 -1
  305. package/lib/pages/cms/products/product-price-sync.cjs.js +0 -1
  306. package/lib/pages/cms/products/server-actions.cjs.js +0 -1
  307. package/lib/pages/cms/shipping/components/RateForm.cjs.js +0 -1
  308. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +0 -1
  309. package/lib/pages/cms/shipping/index.cjs.js +0 -1
  310. package/lib/pages/cms/shipping/server-actions.cjs.js +0 -1
  311. package/lib/pages/cms/taxes/TaxesPage.cjs.js +0 -1
  312. package/lib/pages/cms/taxes/actions.cjs.js +0 -1
  313. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +0 -1
  314. package/lib/pages/cms/taxes/index.cjs.js +0 -1
  315. package/lib/product-context.cjs.js +0 -1
  316. package/lib/product-schema.cjs.js +0 -1
  317. package/lib/providers/freemius.cjs.js +0 -1
  318. package/lib/providers/stripe.cjs.js +0 -1
  319. package/lib/server-actions/coupon-actions.cjs.js +0 -1
  320. package/lib/server-actions/customer-actions.cjs.js +0 -1
  321. package/lib/server-actions/product-actions.cjs.js +0 -1
  322. package/lib/server-actions/shipping-actions.cjs.js +0 -1
  323. package/lib/server-actions/tax-actions.cjs.js +0 -1
  324. package/lib/shipping-rate-currency.cjs.js +0 -1
  325. package/lib/states.cjs.js +0 -1
  326. package/lib/stripe/checkout.cjs.js +0 -1
  327. package/lib/stripe/client.cjs.js +0 -1
  328. package/lib/stripe/order-sync.cjs.js +0 -1
  329. package/lib/stripe/webhooks.cjs.js +0 -1
  330. package/lib/tax-calculation.cjs.js +0 -1
  331. package/lib/use-cart.cjs.js +0 -1
  332. package/lib/variation-utils.cjs.js +0 -1
  333. package/server.cjs.js +0 -1
  334. /package/_virtual/_rolldown/{runtime.cjs.js → runtime.cjs} +0 -0
  335. /package/lib/{countries.cjs.js → countries.cjs} +0 -0
  336. /package/lib/{coupons.cjs.js → coupons.cjs} +0 -0
  337. /package/lib/{currency-constants.cjs.js → currency-constants.cjs} +0 -0
  338. /package/lib/{currency-rest-client.cjs.js → currency-rest-client.cjs} +0 -0
  339. /package/lib/{currency-store.cjs.js → currency-store.cjs} +0 -0
  340. /package/lib/{currency.cjs.js → currency.cjs} +0 -0
  341. /package/lib/{inventory-settings.cjs.js → inventory-settings.cjs} +0 -0
  342. /package/lib/{invoice-ui.cjs.js → invoice-ui.cjs} +0 -0
  343. /package/lib/{invoice.cjs.js → invoice.cjs} +0 -0
  344. /package/lib/{order-tax-details.cjs.js → order-tax-details.cjs} +0 -0
  345. /package/lib/pages/cms/coupons/{ProductScopePicker.cjs.js → ProductScopePicker.cjs} +0 -0
  346. /package/lib/pages/cms/coupons/{product-options.cjs.js → product-options.cjs} +0 -0
  347. /package/lib/pages/cms/orders/{OrderPrintButton.cjs.js → OrderPrintButton.cjs} +0 -0
  348. /package/lib/pages/cms/orders/{actions.cjs.js → actions.cjs} +0 -0
  349. /package/lib/pages/cms/orders/{export-actions.cjs.js → export-actions.cjs} +0 -0
  350. /package/lib/pages/cms/payments/{PaymentsClient.cjs.js → PaymentsClient.cjs} +0 -0
  351. /package/lib/pages/cms/products/attributes/components/{AttributeManager.cjs.js → AttributeManager.cjs} +0 -0
  352. /package/lib/pages/cms/products/components/{DeleteProductButton.cjs.js → DeleteProductButton.cjs} +0 -0
  353. /package/lib/pages/cms/products/components/{SaleScheduleFields.cjs.js → SaleScheduleFields.cjs} +0 -0
  354. /package/lib/{payment-config.cjs.js → payment-config.cjs} +0 -0
  355. /package/lib/{shared-inventory.cjs.js → shared-inventory.cjs} +0 -0
  356. /package/lib/{trials.cjs.js → trials.cjs} +0 -0
  357. /package/lib/{types.cjs.js → types.cjs} +0 -0
  358. /package/lib/{use-price-formatter.cjs.js → use-price-formatter.cjs} +0 -0
  359. /package/lib/{zod-config.cjs.js → zod-config.cjs} +0 -0
@@ -1 +0,0 @@
1
- const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../actions.cjs.js"),n=require("../server-actions.cjs.js"),r=require("./components/AttributeManager.cjs.js");let i=require("next/link");i=e.__toESM(i,1);let a=require("lucide-react"),o=require("react/jsx-runtime"),s=require("@nextblock-cms/db/server"),c=require("@nextblock-cms/ui");async function l(){let[e,l]=await Promise.all([t.getGlobalProductAttributes(),(0,s.getActiveLanguagesServerSide)()]),u=(e||[]).map(e=>({id:e.id,name:e.name,name_translations:e.name_translations||{},slug:e.slug,terms:(e.product_attribute_terms||[]).map(e=>({...e,value_translations:e.value_translations||{}}))}));return(0,o.jsxs)(`div`,{className:`space-y-8 w-full max-w-[1200px] mx-auto px-6 py-8`,children:[(0,o.jsx)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:(0,o.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,o.jsx)(c.Button,{variant:`outline`,size:`icon`,asChild:!0,children:(0,o.jsx)(i.default,{href:`/cms/products`,children:(0,o.jsx)(a.ArrowLeft,{className:`h-4 w-4`})})}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Global Attribute Management`}),(0,o.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Define reusable attributes and terms for variation-based physical products.`})]})]})}),(0,o.jsx)(r.AttributeManager,{attributes:u,createAttributeAction:n.createProductAttributeAction,deleteAttributeAction:n.deleteProductAttributeAction,createTermAction:n.createProductAttributeTermAction,deleteTermAction:n.deleteProductAttributeTermAction,reorderTermsAction:n.reorderProductAttributeTermsAction,updateTranslationsAction:n.updateProductAttributeTranslationsAction,languages:l})]})}exports.AttributeManagementPage=l;
@@ -1 +0,0 @@
1
- const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../actions.cjs.js"),n=require("../server-actions.cjs.js"),r=require("./components/CategoryManager.cjs.js");let i=require("next/link");i=e.__toESM(i,1);let a=require("lucide-react"),o=require("react/jsx-runtime"),s=require("@nextblock-cms/db/server"),c=require("@nextblock-cms/ui");async function l(){let[e,l]=await Promise.all([t.getCategoriesWithCount(),(0,s.getActiveLanguagesServerSide)()]);return(0,o.jsxs)(`div`,{className:`space-y-8 w-full max-w-[1200px] mx-auto px-6 py-8`,children:[(0,o.jsx)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:(0,o.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,o.jsx)(c.Button,{variant:`outline`,size:`icon`,asChild:!0,children:(0,o.jsx)(i.default,{href:`/cms/products`,children:(0,o.jsx)(a.ArrowLeft,{className:`h-4 w-4`})})}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Category Management`}),(0,o.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Create and manage product categories for organizing your e-commerce catalog.`})]})]})}),(0,o.jsx)(r.CategoryManager,{initialCategories:e,createCategory:n.createCategoryAction,updateCategory:n.updateCategoryAction,deleteCategory:n.deleteCategoryAction,languages:l})]})}exports.CategoryManagementPage=l;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../../_virtual/_rolldown/runtime.cjs.js");let t=require("react");t=e.__toESM(t,1);let n=require("lucide-react"),r=require("react/jsx-runtime"),i=require("sonner"),a=require("next/navigation"),o=require("@nextblock-cms/ui");function s({initialCategories:e=[],languages:s=[],createCategory:c,updateCategory:l,deleteCategory:u}){let d=(0,a.useRouter)(),[f,p]=(0,t.useState)(e),[m,h]=(0,t.useState)(!1),[g,_]=(0,t.useState)(null),[v,y]=(0,t.useState)(``),[b,x]=(0,t.useState)(``),[S,C]=(0,t.useState)(``),[w,T]=(0,t.useState)({}),[E,D]=(0,t.useState)({}),[O,k]=(0,t.useState)(!1),A=(s||[]).filter(e=>!e.is_default);(0,t.useEffect)(()=>{p(e)},[e]);let j=e=>e.toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``),M=e=>{let t=e.target.value;y(t),!O&&!g&&x(j(t))},N=e=>{x(j(e.target.value)),k(!0)},P=e=>{_(e),y(e.name),x(e.slug),C(e.description||``),T(e.name_translations||{}),D(e.description_translations||{}),k(!0)},F=()=>{_(null),y(``),x(``),C(``),T({}),D({}),k(!1)},I=async e=>{if(e.preventDefault(),!v.trim()){i.toast.error(`Category name is required.`);return}h(!0);let t=i.toast.loading(g?`Updating category...`:`Creating category...`);try{let e={name:v.trim(),slug:b.trim()||void 0,description:S.trim()||void 0,nameTranslations:w,descriptionTranslations:E},n;n=g?await l(g.id,e):await c(e),n.success?(i.toast.success(g?`Category updated successfully!`:`Category created successfully!`,{id:t}),F(),d.refresh()):i.toast.error(n.error||`Failed to save category.`,{id:t})}catch(e){i.toast.error(e.message||`An unexpected error occurred.`,{id:t})}finally{h(!1)}},L=async e=>{let t=`Are you sure you want to delete the category "${e.name}"? This will detach it from any assigned products.`;if(!window.confirm(t))return;h(!0);let n=i.toast.loading(`Deleting category...`);try{let t=await u(e.id);t.success?(i.toast.success(`Category deleted successfully!`,{id:n}),g?.id===e.id&&F(),d.refresh()):i.toast.error(t.error||`Failed to delete category.`,{id:n})}catch(e){i.toast.error(e.message||`An unexpected error occurred.`,{id:n})}finally{h(!1)}};return(0,r.jsxs)(`div`,{className:`grid gap-6 md:grid-cols-12 items-start`,children:[(0,r.jsx)(`div`,{className:`md:col-span-4 space-y-4`,children:(0,r.jsxs)(o.Card,{className:`p-5 shadow-lg border-t-4 border-t-amber-500 bg-card/65 backdrop-blur-md transition-all duration-300`,children:[(0,r.jsxs)(`div`,{className:`flex items-center gap-2 mb-4`,children:[(0,r.jsx)(n.FolderPlus,{className:`h-5 w-5 text-amber-500`}),(0,r.jsx)(`h2`,{className:`text-base font-bold tracking-tight`,children:g?`Edit Category`:`Add New Category`})]}),(0,r.jsxs)(`form`,{onSubmit:I,className:`space-y-4`,children:[(0,r.jsxs)(`div`,{className:`space-y-1`,children:[(0,r.jsx)(o.Label,{htmlFor:`name`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Name`}),(0,r.jsx)(o.Input,{id:`name`,placeholder:`e.g. T-Shirts`,value:v,onChange:M,disabled:m,className:`h-8 text-sm`,required:!0})]}),(0,r.jsxs)(`div`,{className:`space-y-1`,children:[(0,r.jsxs)(o.Label,{htmlFor:`slug`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none flex items-center justify-between w-full`,children:[(0,r.jsx)(`span`,{children:`Slug`}),!O&&!g&&(0,r.jsx)(`span`,{className:`text-[10px] text-amber-600 dark:text-amber-400 capitalize`,children:`Auto-generating`})]}),(0,r.jsx)(o.Input,{id:`slug`,placeholder:`e.g. t-shirts`,value:b,onChange:N,disabled:m,className:`h-8 text-sm font-mono`})]}),(0,r.jsxs)(`div`,{className:`space-y-1`,children:[(0,r.jsx)(o.Label,{htmlFor:`description`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Description`}),(0,r.jsx)(o.Textarea,{id:`description`,placeholder:`Optional description of the category...`,value:S,onChange:e=>C(e.target.value),disabled:m,className:`text-sm min-h-[90px] resize-none`})]}),A.length>0&&(0,r.jsxs)(`div`,{className:`border-t border-border/50 pt-4 mt-4 space-y-4`,children:[(0,r.jsx)(`h3`,{className:`text-xs uppercase font-bold text-muted-foreground tracking-wider`,children:`Translations`}),A.map(e=>(0,r.jsxs)(`div`,{className:`space-y-3 p-3 rounded-md bg-muted/30 border border-border/30`,children:[(0,r.jsx)(`span`,{className:`text-[11px] font-bold text-amber-600 dark:text-amber-400 uppercase tracking-wider`,children:e.name}),(0,r.jsxs)(`div`,{className:`space-y-1`,children:[(0,r.jsxs)(o.Label,{htmlFor:`name-${e.code}`,className:`text-[10px] uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:[`Name (`,e.code,`)`]}),(0,r.jsx)(o.Input,{id:`name-${e.code}`,placeholder:`Translation for ${v||`Name`}`,value:w[e.code]||``,onChange:t=>T(n=>({...n,[e.code]:t.target.value})),disabled:m,className:`h-8 text-sm`})]}),(0,r.jsxs)(`div`,{className:`space-y-1`,children:[(0,r.jsxs)(o.Label,{htmlFor:`desc-${e.code}`,className:`text-[10px] uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:[`Description (`,e.code,`)`]}),(0,r.jsx)(o.Textarea,{id:`desc-${e.code}`,placeholder:`Translation for Description`,value:E[e.code]||``,onChange:t=>D(n=>({...n,[e.code]:t.target.value})),disabled:m,className:`text-sm min-h-[60px] resize-none`})]})]},e.code))]}),(0,r.jsxs)(`div`,{className:`flex items-center gap-2 pt-2`,children:[(0,r.jsx)(o.Button,{type:`submit`,disabled:m,size:`sm`,className:`flex-1 bg-amber-600 hover:bg-amber-500 text-white font-medium shadow-md shadow-amber-600/10 h-8 text-xs cursor-pointer`,children:m?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.Loader2,{className:`mr-1.5 h-3.5 w-3.5 animate-spin`}),`Saving...`]}):g?`Update Category`:`Create Category`}),g&&(0,r.jsx)(o.Button,{type:`button`,onClick:F,disabled:m,variant:`outline`,size:`sm`,className:`h-8 text-xs border-dashed cursor-pointer`,children:`Cancel`})]})]})]})}),(0,r.jsx)(`div`,{className:`md:col-span-8`,children:(0,r.jsxs)(o.Card,{className:`p-4 shadow-lg bg-card/65 backdrop-blur-md border border-border/40`,children:[(0,r.jsxs)(`div`,{className:`flex items-center gap-2 mb-4 pb-2 border-b border-border/50`,children:[(0,r.jsx)(n.FolderKanban,{className:`h-5 w-5 text-muted-foreground`}),(0,r.jsxs)(`div`,{children:[(0,r.jsx)(`h2`,{className:`text-base font-bold tracking-tight`,children:`Active Categories`}),(0,r.jsx)(`p`,{className:`text-[11px] text-muted-foreground leading-none mt-0.5`,children:`Categories are shared globally across languages.`})]})]}),f.length===0?(0,r.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 px-4 text-center border-2 border-dashed border-border/60 rounded-lg bg-muted/20 animate-in fade-in duration-300`,children:[(0,r.jsx)(n.HelpCircle,{className:`h-10 w-10 text-muted-foreground/50 mb-3`}),(0,r.jsx)(`h3`,{className:`text-sm font-bold text-muted-foreground`,children:`No Categories Found`}),(0,r.jsx)(`p`,{className:`text-xs text-muted-foreground/80 max-w-sm mt-1`,children:`Add your first category using the form on the left to start organizing your catalog products.`})]}):(0,r.jsx)(`div`,{className:`overflow-x-auto border rounded-lg bg-background/50`,children:(0,r.jsxs)(`table`,{className:`w-full text-left border-collapse text-xs`,children:[(0,r.jsx)(`thead`,{children:(0,r.jsxs)(`tr`,{className:`border-b bg-muted/40 font-bold uppercase tracking-wider text-muted-foreground/85 select-none`,children:[(0,r.jsx)(`th`,{className:`p-3 pl-4`,children:`Name`}),(0,r.jsx)(`th`,{className:`p-3`,children:`Slug`}),(0,r.jsx)(`th`,{className:`p-3 text-center`,children:`Products`}),(0,r.jsx)(`th`,{className:`p-3 pr-4 text-right`,children:`Actions`})]})}),(0,r.jsx)(`tbody`,{className:`divide-y divide-border/60`,children:f.map(e=>(0,r.jsxs)(`tr`,{className:`hover:bg-muted/10 transition-colors group`,children:[(0,r.jsxs)(`td`,{className:`p-3 pl-4`,children:[(0,r.jsx)(`div`,{className:`font-semibold text-slate-800 dark:text-slate-100`,children:e.name}),e.description&&(0,r.jsx)(`div`,{className:`text-[10px] text-muted-foreground mt-0.5 max-w-xs truncate leading-normal`,title:e.description,children:e.description})]}),(0,r.jsx)(`td`,{className:`p-3`,children:(0,r.jsxs)(`code`,{className:`px-1.5 py-0.5 rounded bg-muted/65 font-mono text-[10px]`,children:[`/`,e.slug]})}),(0,r.jsx)(`td`,{className:`p-3 text-center`,children:(0,r.jsx)(`span`,{className:`inline-flex items-center justify-center px-2 py-0.5 rounded-full text-[10px] font-bold bg-amber-500/10 text-amber-800 dark:text-amber-300 border border-amber-500/15`,children:e.productCount})}),(0,r.jsx)(`td`,{className:`p-3 pr-4 text-right`,children:(0,r.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5`,children:[(0,r.jsx)(o.Button,{variant:`outline`,size:`icon`,disabled:m,onClick:()=>P(e),className:`h-7 w-7 opacity-85 hover:opacity-100 group-hover:border-amber-500/30 cursor-pointer`,title:`Edit Category`,children:(0,r.jsx)(n.Edit2,{className:`h-3.5 w-3.5 text-muted-foreground group-hover:text-amber-600 dark:group-hover:text-amber-400`})}),(0,r.jsx)(o.Button,{variant:`outline`,size:`icon`,disabled:m,onClick:()=>L(e),className:`h-7 w-7 opacity-85 hover:opacity-100 group-hover:border-red-500/30 cursor-pointer`,title:`Delete Category`,children:(0,r.jsx)(n.Trash2,{className:`h-3.5 w-3.5 text-muted-foreground group-hover:text-red-500`})})]})})]},e.id))})]})})]})})]})}exports.CategoryManager=s;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../actions.cjs.js");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("react/jsx-runtime"),a=require("next/navigation"),o=require("@nextblock-cms/ui");function s({productId:e,currentLanguageId:s,translationGroupId:c,allSiteLanguages:l}){let[u,d]=(0,n.useState)(!1),[f,p]=(0,n.useState)(null),[m,h]=(0,n.useState)([]),[g,_]=(0,n.useState)(!1),[v,y]=(0,n.useState)(null),[b,x]=(0,n.useTransition)(),S=(0,a.useRouter)();(0,n.useEffect)(()=>{u&&c&&(async()=>{_(!0);try{let n=(await t.getProductTranslations(c)).filter(t=>t.id!==e);h(n)}catch(e){console.error(`Error fetching translations:`,e)}finally{_(!1)}})()},[u,c,e]);let C=async()=>{if(!f){y({type:`error`,text:`Please select a source version to copy from.`});return}y(null),x(async()=>{let n=await t.copyProductFromLanguageAction(e,f);n.success?(y({type:`success`,text:`Content copied successfully. The page will now refresh.`}),setTimeout(()=>{d(!1),S.refresh()},1500)):y({type:`error`,text:n.error||`Failed to copy content.`})})},w=l.find(e=>e.id===s);return(0,i.jsxs)(o.Dialog,{open:u,onOpenChange:d,children:[(0,i.jsx)(o.DialogTrigger,{asChild:!0,children:(0,i.jsxs)(o.Button,{variant:`outline`,title:`Copy content from another language`,children:[(0,i.jsx)(r.Copy,{className:`h-4 w-4 mr-2`}),`Copy Content...`]})}),(0,i.jsxs)(o.DialogContent,{children:[(0,i.jsxs)(o.DialogHeader,{children:[(0,i.jsx)(o.DialogTitle,{children:`Copy Content from Another Language`}),(0,i.jsxs)(o.DialogDescription,{children:[`Select a source version to copy from. This will replace the title, description, and media of the current product (`,w?.name,`). This action cannot be undone.`]})]}),(0,i.jsxs)(`div`,{className:`space-y-4 py-4`,children:[(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(o.Label,{htmlFor:`sourceProduct`,children:`Select Source Version`}),(0,i.jsxs)(o.Select,{onValueChange:e=>p(e),disabled:b||g,value:f||void 0,children:[(0,i.jsx)(o.SelectTrigger,{id:`sourceProduct`,children:(0,i.jsx)(o.SelectValue,{placeholder:g?`Loading versions...`:`Select a version...`})}),(0,i.jsx)(o.SelectContent,{children:m.length>0?m.map(e=>{let t=l.find(t=>t.id===e.language_id);return(0,i.jsxs)(o.SelectItem,{value:e.id,children:[e.title,` (`,t?.name||`Unknown Language`,`)`]},e.id)}):(0,i.jsx)(o.SelectItem,{value:`none`,disabled:!0,children:`No other versions available`})})]})]}),v&&(0,i.jsxs)(`div`,{className:`p-3 rounded-md text-sm flex items-center gap-2 ${v.type===`success`?`bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400`:`bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400`}`,children:[v.type===`success`?(0,i.jsx)(r.CheckCircle2,{className:`h-5 w-5`}):(0,i.jsx)(r.AlertCircle,{className:`h-5 w-5`}),v.text]})]}),(0,i.jsxs)(o.DialogFooter,{children:[(0,i.jsx)(o.DialogClose,{asChild:!0,children:(0,i.jsx)(o.Button,{variant:`outline`,children:`Cancel`})}),(0,i.jsx)(o.Button,{onClick:C,disabled:b||!f||f===`none`,children:b?`Copying...`:`Copy Content & Replace`})]})]})]})}exports.CopyProductFromLanguage=s;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../currency.cjs.js");let t=require("react"),n=require("@nextblock-cms/utils"),r=require("react/jsx-runtime"),i=require("@nextblock-cms/ui");function a(e){return(0,n.getCurrencyMinorUnitFactor)(e)===1?0:2}function o(e,t){return e==null||Number.isNaN(e)?``:e.toFixed(t)}function s({id:e,currencyCode:n,value:s,disabled:c,placeholder:l,className:u,allowEmpty:d=!1,onValueChange:f}){let p=a(n),[m,h]=(0,t.useState)(!1),[g,_]=(0,t.useState)(()=>o(s,p));return(0,t.useEffect)(()=>{m||_(o(s,p))},[s,p,m]),(0,r.jsx)(i.Input,{id:e,type:`text`,inputMode:`decimal`,value:g,disabled:c,placeholder:l,className:u,onFocus:()=>h(!0),onChange:e=>{let t=e.target.value.replace(/[^0-9.]/g,``),n=t.indexOf(`.`);if(n!==-1&&(t=t.slice(0,n+1)+t.slice(n+1).replace(/\./g,``)),_(t),t===``||t===`.`){f(d?null:0);return}let r=Number(t);Number.isNaN(r)||f(r)},onBlur:()=>{if(h(!1),s!=null&&!Number.isNaN(s)){let e=Number(s.toFixed(p));e!==s&&f(e)}}})}function c({idPrefix:t=`currency`,currencies:n,prices:a,salePrices:o,managedCurrencyCodes:c=[],onPriceChange:l,onSalePriceChange:u,readOnly:d=!1,helperText:f,trailing:p}){let m=n.find(e=>e.is_default)??n[0],h=new Set(c);return m?(0,r.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[f&&(0,r.jsx)(`p`,{className:`text-xs text-muted-foreground bg-muted/20 p-2 rounded-md border`,children:f}),(0,r.jsx)(`div`,{className:`divide-y divide-muted/50`,children:n.map(n=>{let c=e.normalizeCurrencyRecord(n),f=c.is_default!==!0&&h.has(c.code),m=d||f;return(0,r.jsxs)(`div`,{className:`flex flex-wrap items-stretch gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,r.jsxs)(`div`,{className:`flex items-center gap-2 w-[160px] shrink-0 self-stretch border-r border-border/50 pr-4`,children:[(0,r.jsx)(`span`,{className:`text-sm font-black tracking-tighter text-foreground`,children:c.code}),(0,r.jsx)(`span`,{className:`text-[11px] text-muted-foreground font-medium`,children:c.symbol}),c.is_default?(0,r.jsx)(`span`,{className:`text-[9px] uppercase font-bold bg-primary/10 text-primary px-1.5 py-0.5 rounded tracking-widest leading-none`,children:`Default`}):f?(0,r.jsx)(`span`,{className:`text-[9px] uppercase font-bold bg-muted text-muted-foreground px-1.5 py-0.5 rounded tracking-widest leading-none`,children:`Auto`}):null,!c.is_default&&(0,r.jsxs)(`span`,{className:`text-[9px] text-muted-foreground/80 font-medium tracking-wide leading-none ml-auto`,children:[`x`,c.exchange_rate]})]}),(0,r.jsxs)(`div`,{className:`grid flex-1 grid-cols-2 items-end gap-3 sm:grid-cols-4`,children:[(0,r.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,r.jsx)(i.Label,{htmlFor:`${t}-price-${c.code}`,className:`block text-[10px] uppercase font-bold text-muted-foreground tracking-widest`,children:`Price`}),(0,r.jsxs)(`div`,{className:`relative`,children:[(0,r.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-xs text-muted-foreground font-bold pointer-events-none`,children:c.symbol}),(0,r.jsx)(s,{id:`${t}-price-${c.code}`,currencyCode:c.code,value:a[c.code],disabled:m,className:`h-8 w-full text-sm pl-6`,onValueChange:e=>l(c.code,e??0)})]})]}),(0,r.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,r.jsx)(i.Label,{htmlFor:`${t}-sale-price-${c.code}`,className:`block text-[10px] uppercase font-bold text-muted-foreground tracking-widest`,children:`Sale`}),(0,r.jsxs)(`div`,{className:`relative`,children:[(0,r.jsx)(`span`,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-xs text-muted-foreground font-bold pointer-events-none`,children:c.symbol}),(0,r.jsx)(s,{id:`${t}-sale-price-${c.code}`,currencyCode:c.code,value:o[c.code],disabled:m,placeholder:f?`Auto`:`—`,allowEmpty:!0,className:`h-8 w-full text-sm pl-6`,onValueChange:e=>u(c.code,e)})]})]}),p&&c.is_default?p:null]})]},c.code)})})]}):null}exports.CurrencyPriceFields=c;
@@ -1 +0,0 @@
1
- "use client";const e=require("../actions.cjs.js");let t=require("react"),n=require("react/jsx-runtime"),r=require("sonner"),i=require("@nextblock-cms/ui");function a({plans:e}){return(0,n.jsx)(`div`,{className:`w-full`,children:e&&e.length>0?(0,n.jsx)(`div`,{className:`space-y-8`,children:e.map(t=>(0,n.jsxs)(`div`,{className:`w-full`,children:[e.length>1&&(0,n.jsx)(`h3`,{className:`font-semibold text-lg text-slate-700 dark:text-slate-300 border-b pb-2 mb-4 mt-6`,children:t.title||t.name}),(0,n.jsx)(`div`,{className:`${e.length>1?`rounded-lg border`:`rounded-b-lg border-x border-b`} overflow-x-auto dark:border-slate-700 bg-card`,children:(0,n.jsxs)(i.Table,{children:[(0,n.jsx)(i.TableHeader,{children:(0,n.jsxs)(i.TableRow,{children:[(0,n.jsx)(i.TableHead,{children:`Licenses`}),(0,n.jsx)(i.TableHead,{children:`API Monthly`}),(0,n.jsx)(i.TableHead,{children:`Override Monthly`}),(0,n.jsx)(i.TableHead,{children:`API Annual`}),(0,n.jsx)(i.TableHead,{children:`Override Annual`}),(0,n.jsx)(i.TableHead,{children:`API Lifetime`}),(0,n.jsx)(i.TableHead,{children:`Override Lifetime`})]})}),(0,n.jsx)(i.TableBody,{children:t.freemius_pricing&&t.freemius_pricing.length>0?t.freemius_pricing.map(e=>(0,n.jsx)(o,{pricing:e},e.id)):(0,n.jsx)(i.TableRow,{children:(0,n.jsx)(i.TableCell,{colSpan:7,className:`text-center text-slate-500 py-4`,children:`No pricing configurations found for this plan.`})})})]})})]},t.id))}):(0,n.jsxs)(`div`,{className:`text-center py-10 bg-slate-50 dark:bg-slate-800/50 rounded border border-dashed border-slate-300 dark:border-slate-700`,children:[(0,n.jsx)(`p`,{className:`text-slate-500`,children:`No Freemius plans synchronized yet.`}),(0,n.jsx)(`p`,{className:`text-xs mt-2 text-slate-400`,children:`Click the full synchronization button to import from Freemius.`})]})})}function o({pricing:a}){let[o,s]=(0,t.useTransition)(),c=(t,n)=>{let i=n===``?null:parseFloat(n);n!==``&&Number.isNaN(i)||s(async()=>{let{success:n,error:o}=await e.updateFreemiusOverride(a.id,{[t]:i});n?r.toast.success(`Pricing override saved`):r.toast.error(o||`Failed to update pricing`)})};return(0,n.jsxs)(i.TableRow,{children:[(0,n.jsx)(i.TableCell,{className:`font-medium`,children:a.license_quota||`Unlimited`}),(0,n.jsx)(i.TableCell,{className:`text-slate-500`,children:a.api_monthly_price?`$${a.api_monthly_price}`:`-`}),(0,n.jsx)(i.TableCell,{children:(0,n.jsx)(i.Input,{type:`number`,step:`0.01`,placeholder:`Override...`,defaultValue:a.override_monthly_price||``,onBlur:e=>{e.target.value!==(a.override_monthly_price?.toString()||``)&&c(`override_monthly_price`,e.target.value)},className:`w-24 h-8`,disabled:o})}),(0,n.jsx)(i.TableCell,{className:`text-slate-500`,children:a.api_annual_price?`$${a.api_annual_price}`:`-`}),(0,n.jsx)(i.TableCell,{children:(0,n.jsx)(i.Input,{type:`number`,step:`0.01`,placeholder:`Override...`,defaultValue:a.override_annual_price||``,onBlur:e=>{e.target.value!==(a.override_annual_price?.toString()||``)&&c(`override_annual_price`,e.target.value)},className:`w-24 h-8`,disabled:o})}),(0,n.jsx)(i.TableCell,{className:`text-slate-500`,children:a.api_lifetime_price?`$${a.api_lifetime_price}`:`-`}),(0,n.jsx)(i.TableCell,{children:(0,n.jsx)(i.Input,{type:`number`,step:`0.01`,placeholder:`Override...`,defaultValue:a.override_lifetime_price||``,onBlur:e=>{e.target.value!==(a.override_lifetime_price?.toString()||``)&&c(`override_lifetime_price`,e.target.value)},className:`w-24 h-8`,disabled:o})})]})}exports.FreemiusPricingDashboard=a;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../server-actions.cjs.js");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("@nextblock-cms/utils"),a=require("react/jsx-runtime"),o=require("sonner"),s=require("@nextblock-cms/ui");function c({categories:e=[],selectedIds:c=[],onChange:l,placeholder:u=`Select categories...`}){let[d,f]=(0,n.useState)(!1),[p,m]=(0,n.useState)(``),[h,g]=(0,n.useState)(e),[_,v]=(0,n.useState)(!1);(0,n.useEffect)(()=>{g(e)},[e]);let y=(0,n.useMemo)(()=>h.filter(e=>c.includes(e.id)),[h,c]),b=(0,n.useMemo)(()=>{if(!p)return h;let e=p.toLowerCase();return h.filter(t=>t.name.toLowerCase().includes(e)||t.slug.toLowerCase().includes(e))},[h,p]),x=p.trim(),S=(0,n.useMemo)(()=>{if(!x)return!1;let e=x.toLowerCase();return!h.some(t=>t.name.toLowerCase()===e)},[h,x]),C=async()=>{if(x){v(!0);try{let e=await t.createCategoryAction({name:x});if(e.success&&e.category){let t={id:e.category.id,name:e.category.name,slug:e.category.slug};g(e=>[...e,t]),l([...c,t.id]),m(``),o.toast.success(`Category "${t.name}" created successfully.`)}else o.toast.error(e.error||`Failed to create category.`)}catch(e){o.toast.error(e.message||`An error occurred while creating category.`)}finally{v(!1)}}},w=e=>{l(c.includes(e)?c.filter(t=>t!==e):[...c,e])},T=(e,t)=>{t.stopPropagation(),l(c.filter(t=>t!==e))};return(0,a.jsxs)(`div`,{className:`space-y-2`,children:[(0,a.jsx)(`div`,{className:`flex flex-wrap gap-1.5 min-h-[32px] p-1 border rounded-md bg-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2`,children:y.length===0?(0,a.jsx)(`span`,{className:`text-xs text-muted-foreground self-center px-2 py-1 select-none`,children:`No categories selected.`}):y.map(e=>(0,a.jsxs)(s.Badge,{variant:`secondary`,className:`pl-2 pr-1.5 py-0.5 text-xs flex items-center gap-1 bg-amber-500/10 text-amber-800 dark:text-amber-300 border border-amber-500/20 rounded-full`,children:[e.name,(0,a.jsx)(`button`,{type:`button`,onClick:t=>T(e.id,t),className:`rounded-full p-0.5 text-muted-foreground hover:bg-amber-500/20 hover:text-amber-950 dark:hover:text-amber-50 transition-colors cursor-pointer`,"aria-label":`Remove ${e.name}`,children:(0,a.jsx)(r.X,{className:`h-3 w-3`})})]},e.id))}),(0,a.jsxs)(s.Popover,{open:d,onOpenChange:f,children:[(0,a.jsx)(s.PopoverTrigger,{asChild:!0,children:(0,a.jsxs)(s.Button,{variant:`outline`,role:`combobox`,"aria-expanded":d,className:`w-full justify-between h-8 text-xs font-normal`,children:[(0,a.jsx)(`span`,{className:`truncate`,children:c.length>0?`${c.length} categor${c.length===1?`y`:`ies`} selected`:u}),(0,a.jsx)(r.ChevronsUpDown,{className:`ml-2 h-4 w-4 shrink-0 opacity-50`})]})}),(0,a.jsxs)(s.PopoverContent,{className:`w-(--radix-popover-trigger-width) p-0`,align:`start`,children:[(0,a.jsxs)(`div`,{className:`flex items-center border-b px-3`,children:[(0,a.jsx)(r.Search,{className:`mr-2 h-4 w-4 shrink-0 opacity-50`}),(0,a.jsx)(s.Input,{className:`flex h-9 w-full rounded-md bg-transparent py-2 text-xs outline-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0`,placeholder:`Search categories...`,value:p,onChange:e=>m(e.target.value)})]}),S&&(0,a.jsx)(`div`,{className:`border-b border-border/50 p-1`,children:(0,a.jsxs)(s.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`w-full justify-start text-xs h-8 text-amber-600 dark:text-amber-400 hover:text-amber-700 hover:bg-amber-500/10 cursor-pointer`,onClick:C,disabled:_,children:[_?(0,a.jsx)(r.Loader2,{className:`mr-2 h-3 w-3 animate-spin`}):(0,a.jsx)(`span`,{className:`font-bold mr-1.5`,children:`+`}),`Create category "`,x,`"`]})}),(0,a.jsx)(`div`,{className:`max-h-60 overflow-y-auto p-1`,children:b.length===0?(0,a.jsx)(`p`,{className:`py-4 text-center text-xs text-muted-foreground`,children:`No categories found.`}):(0,a.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:b.map(e=>{let t=c.includes(e.id);return(0,a.jsxs)(`div`,{onClick:()=>w(e.id),className:(0,i.cn)(`relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-xs outline-none hover:bg-accent hover:text-accent-foreground text-left transition-colors`,t&&`bg-accent/40 font-medium`),children:[(0,a.jsx)(`span`,{className:`absolute left-2 flex h-3.5 w-3.5 items-center justify-center pointer-events-none`,children:(0,a.jsx)(s.Checkbox,{checked:t,tabIndex:-1,"aria-label":`Toggle ${e.name}`,className:`h-3.5 w-3.5`})}),(0,a.jsxs)(`span`,{className:`flex flex-col`,children:[(0,a.jsx)(`span`,{children:e.name}),(0,a.jsxs)(`span`,{className:`font-mono text-[9px] text-muted-foreground leading-none`,children:[`/`,e.slug]})]}),t&&(0,a.jsx)(`span`,{className:`absolute right-2 flex h-3.5 w-3.5 items-center justify-center`,children:(0,a.jsx)(r.Check,{className:`h-3.5 w-3.5 text-primary`})})]},e.id)})})})]})]})]})}exports.ProductCategorySelector=c;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../../../types.cjs.js"),n=require("../../../../currency.cjs.js"),r=require("../../../../product-schema.cjs.js"),i=require("./ProductMediaManager.cjs.js"),a=require("./SyncFreemiusPricingButton.cjs.js"),o=require("./CurrencyPriceFields.cjs.js"),s=require("./SaleScheduleFields.cjs.js"),c=require("../product-price-sync.cjs.js"),ee=require("./VariationsEditor.cjs.js"),l=require("./ProductCategorySelector.cjs.js");let u=require("react");u=e.__toESM(u,1);let d=require("lucide-react"),f=require("@nextblock-cms/utils"),p=require("react/jsx-runtime"),te=require("react-hook-form"),ne=require("@hookform/resolvers/zod"),m=require("@nextblock-cms/ui");function h({title:e,description:t,action:n,children:r,hideHeader:i}){return(0,p.jsxs)(`section`,{className:`rounded-lg border bg-card p-3 shadow-sm space-y-3`,children:[!i&&(0,p.jsxs)(`div`,{className:`flex items-start justify-between gap-4 flex-wrap border-b border-muted/50 pb-2 mb-1`,children:[(0,p.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,p.jsx)(`h2`,{className:`text-sm font-bold tracking-tight`,children:e}),t?(0,p.jsx)(`p`,{className:`text-[11px] text-muted-foreground leading-none`,children:t}):null]}),n]}),(0,p.jsx)(`div`,{className:i?``:`pt-1`,children:r})]})}function re(e,t,n){let r=t?Number.parseInt(t,10):void 0;return e?.language_id||(Number.isFinite(r)?r:void 0)||n.find(e=>e.is_default)?.id||n[0]?.id||1}function g(e,n,r,i,a){let o=(i.find(e=>e.is_default)??i[0])?.code||`USD`,s=e?.prices&&Object.keys(e.prices).length>0?e.prices:{[o]:typeof e?.price==`number`?e.price/100:0},ee=e?.sale_prices&&Object.keys(e.sale_prices).length>0?e.sale_prices:typeof e?.sale_price==`number`?{[o]:e.sale_price/100}:{},l=e?.product_type||``,u=e?.payment_provider||(e?.product_type?t.derivePaymentProviderFromProductType(e.product_type):`stripe`);return{...c.sanitizeProductFormValuesForStoreManagedCurrencies({product_type:l||`physical`,payment_provider:u,title:e?.title||``,slug:e?.slug||``,sku:e?.sku||``,upc:e?.upc||``,is_taxable:e?.is_taxable??!0,price:typeof e?.price==`number`?e.price/100:0,prices:s,sale_price:typeof e?.sale_price==`number`?e.sale_price/100:null,sale_prices:ee,stock:e?.stock||0,meta_title:e?.meta_title||``,meta_description:e?.meta_description||``,custom_canonical:e?.custom_canonical||``,short_description:e?.short_description||``,description_json:e?.description_json||{type:`doc`,content:[{type:`paragraph`}]},freemius_product_id:e?.freemius_product_id||``,freemius_plan_id:e?.freemius_plan_id||``,trial_period_days:e?.trial_period_days??0,trial_requires_payment_method:e?.trial_requires_payment_method??!1,status:e?.status||`draft`,language_id:re(e,n,r),translation_group_id:e?.translation_group_id||a||void 0,product_media:e?.product_media?.map(e=>({media_id:e.media_id}))||[],category_ids:e?.category_ids||[],variation_attributes:e?.variation_attributes||[],variants:e?.variants?.map(e=>({...e,prices:e.prices||{},sale_prices:e.sale_prices||{}}))||[]},i),product_type:l,payment_provider:u}}function ie(e){return e?e.map(e=>({id:e.id||e.media_id,media_id:e.media_id,file_path:e.media?.file_path||e.media?.object_key||``,alt:e.media?.alt_text||``,sort_order:e.sort_order??0})).sort((e,t)=>e.sort_order-t.sort_order):[]}function ae(e){return e.map(e=>({media_id:e.media_id}))}function oe(e){return e.map(e=>({media_id:e.media_id,file_path:e.file_path,alt:e.alt}))}var se=e=>e.toString().toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^\w-]+/g,``).replace(/--+/g,`-`).replace(/^-+/,``).replace(/-+$/,``);function _({initialData:e,isEdit:t=!1,mediaPickerNode:re,availableLanguagesProp:_,globalAttributesProp:ce,currenciesProp:le,translationGroupId:v,targetLanguageId:y,freemiusDashboardNode:b,enabledProviders:ue,configStatus:x,createAction:S,updateAction:de,availableCategoriesProp:fe=[],hasOpenDraft:pe=!1,onSeoChange:me}){let[C,w]=(0,u.useState)(!1),[T,E]=(0,u.useState)(()=>!!e?.variants?.length),D=u.default.useMemo(()=>le.filter(e=>e.is_active!==!1).sort((e,t)=>e.is_default===t.is_default?e.code.localeCompare(t.code):e.is_default?-1:1),[le]),O=u.default.useMemo(()=>D.find(e=>e.is_default)??D[0],[D]),k=u.default.useMemo(()=>c.getStoreManagedPriceCurrencyCodes(D),[D]),he=(0,te.useForm)({resolver:(0,ne.zodResolver)(r.productSchema),defaultValues:g(e,y,_,D,v)}),{register:A,handleSubmit:j,setValue:M,reset:ge,watch:N,setError:P,formState:{errors:F,dirtyFields:I}}=he,L=(0,u.useRef)(!0),R=(0,u.useRef)(null),[_e,z]=(0,u.useState)(!1),[ve,B]=(0,u.useState)(null),[ye,be]=(0,u.useState)(null),V=N(),xe=he.formState.isDirty,Se=V.title,Ce=V.meta_title,we=V.meta_description;(0,u.useEffect)(()=>{me?.({title:Se,meta_title:Ce,meta_description:we})},[Se,Ce,we,me]),(0,u.useEffect)(()=>{if(!t)return;if(L.current){L.current=!1,R.current=JSON.stringify(V);return}if(!xe)return;let e=JSON.stringify(V);if(e===R.current)return;let n=setTimeout(()=>{C||(R.current=e,j(He)())},400);return()=>clearTimeout(n)},[V,t,xe,C,j]);let Te=N(`title`),H=N(`product_type`),U=H===`digital`?`freemius`:H===`physical`?`stripe`:void 0,W=H===`physical`,Ee=H===`digital`,De=U?ue[U]:!1,Oe=U?x[U].hasKeys:!1,ke=!!N(`freemius_product_id`),Ae=Number(N(`trial_period_days`)||0),je=!!N(`trial_requires_payment_method`),Me=N(`variants`)||[],G=N(`price`),K=N(`sale_price`),q=N(`prices`)||{},J=N(`sale_prices`)||{},Y=(Me?.length||0)>0,Ne=N(`language_id`),Pe=_.find(e=>e.id===Ne)?.code||_.find(e=>e.is_default)?.code||_[0]?.code,X=u.default.useMemo(()=>c.resolveEditorCurrencyPriceMaps({currencies:D,prices:q,salePrices:J,fallbackPrice:G,fallbackSalePrice:K}),[G,K,D,q,J]),Fe=u.default.useMemo(()=>e?.variants?.map(e=>({...e,prices:e.prices||{},sale_prices:e.sale_prices||{}})),[e?.variants]);(0,u.useEffect)(()=>{if(I.title&&!t){let e=se(Te);M(`slug`,e,{shouldValidate:!0})}},[Te,I.title,M,t]);let[Z,Ie]=(0,u.useState)(()=>ie(e?.product_media)),[Q,$]=(0,u.useState)(new Set);(0,u.useEffect)(()=>{ge(g(e,y,_,D,v)),Ie(ie(e?.product_media)),$(new Set),E(!!e?.variants?.length)},[_,D,e,ge,y,v]);let Le=e=>{let t=new Set(e.map(e=>e.id)),n=Z.filter(e=>!t.has(e.id)),r=new Set(Q);n.forEach(e=>{e.media_id&&r.add(e.media_id)}),$(r),Ie(e),M(`product_media`,ae(e),{shouldDirty:!0}),M(`explicitly_removed_media_ids`,Array.from(r),{shouldDirty:!0})};(0,u.useEffect)(()=>{M(`explicitly_removed_media_ids`,Array.from(Q))},[Q,M]),(0,u.useEffect)(()=>{Y&&E(!0)},[Y]),(0,u.useEffect)(()=>{A(`is_taxable`),A(`price`),A(`sale_price`),A(`payment_provider`),A(`trial_requires_payment_method`)},[A]),(0,u.useEffect)(()=>{if(!Ee){M(`trial_period_days`,0,{shouldDirty:!1,shouldValidate:!0}),M(`trial_requires_payment_method`,!1,{shouldDirty:!1,shouldValidate:!0});return}Ae<=0&&M(`trial_requires_payment_method`,!1,{shouldDirty:!1,shouldValidate:!0})},[Ee,M,Ae]),(0,u.useEffect)(()=>{U&&M(`payment_provider`,U,{shouldDirty:!1,shouldValidate:!0})},[U,M]),(0,u.useEffect)(()=>{O&&q[O.code]===void 0&&M(`prices`,{...q,[O.code]:G||0},{shouldDirty:!1})},[G,O,q,M]);let Re=(0,u.useCallback)((e,t)=>{let n={...q,[e]:t};M(`prices`,n,{shouldDirty:!0,shouldValidate:!0}),e===O?.code&&M(`price`,t,{shouldDirty:!0,shouldValidate:!0})},[O?.code,q,M]),ze=(0,u.useCallback)((e,t)=>{let n={...J,[e]:t};M(`sale_prices`,n,{shouldDirty:!0,shouldValidate:!0}),e===O?.code&&M(`sale_price`,t,{shouldDirty:!0,shouldValidate:!0})},[O?.code,J,M]),Be=(0,u.useCallback)(()=>{if(!O)return;let e=new Set(k),t=q[O.code]??G??0,r=J[O.code]??K??null,i=D.reduce((r,i)=>{if(i.code!==O.code&&e.has(i.code))return r;let a=n.convertMinorUnitAmount({amount:(0,f.majorUnitAmountToMinor)(t,O.code),fromCurrencyCode:O.code,toCurrencyCode:i.code,currencies:D,applyRounding:!0});return r[i.code]=(0,f.minorUnitAmountToMajor)(a,i.code),r},{}),a=D.reduce((t,i)=>{if(i.code!==O.code&&e.has(i.code))return t;if(typeof r!=`number`)return(i.code===O.code||!e.has(i.code))&&(t[i.code]=null),t;let a=n.convertMinorUnitAmount({amount:(0,f.majorUnitAmountToMinor)(r,O.code),fromCurrencyCode:O.code,toCurrencyCode:i.code,currencies:D,applyRounding:!0});return t[i.code]=(0,f.minorUnitAmountToMajor)(a,i.code),t},{});M(`prices`,i,{shouldDirty:!0,shouldValidate:!0}),M(`sale_prices`,a,{shouldDirty:!0,shouldValidate:!0}),M(`price`,i[O.code]??t,{shouldDirty:!0,shouldValidate:!0}),M(`sale_price`,a[O.code]??null,{shouldDirty:!0,shouldValidate:!0})},[D,O,q,J,M,k,G,K]),Ve=(0,u.useCallback)(({variationAttributes:e,variants:t})=>{M(`variation_attributes`,e,{shouldDirty:!0}),M(`variants`,t,{shouldDirty:!0,shouldValidate:!0})},[M]),He=async e=>{w(!0),z(!0),B(null);try{if(!U){let e=`Select whether this product is physical or digital before saving.`;P(`product_type`,{type:`manual`,message:e}),t?B(e):alert(e),w(!1),z(!1);return}let n=W?0:Math.max(0,Number(e.trial_period_days||0)),r={...e,product_type:e.product_type,payment_provider:U,freemius_product_id:W?``:e.freemius_product_id,freemius_plan_id:W?``:e.freemius_plan_id,trial_period_days:n,trial_requires_payment_method:!W&&n>0&&e.trial_requires_payment_method,upc:W?e.upc:null,is_taxable:W?e.is_taxable:!1,variation_attributes:W?e.variation_attributes:[],variants:W?e.variants:[]},i=c.sanitizeProductFormValuesForStoreManagedCurrencies(r,D);if(t&&de)await de(i),be(new Date);else if(S)await S(i);else throw Error(`Product form action is not configured.`)}catch(e){if(console.error(e),e.message===`NEXT_REDIRECT`)return;let n=e.message||`An error occurred while saving.`;if(e.code===`23505`){let t=e.message?.toLowerCase()||``;t.includes(`products_slug_key`)||t.includes(`slug`)?(n=`This slug is already in use. Please choose another one.`,P(`slug`,{type:`manual`,message:n})):(t.includes(`products_sku_key`)||t.includes(`sku`))&&(n=`This SKU is already in use.`,P(`sku`,{type:`manual`,message:n}))}t?B(n):alert(n)}finally{w(!1),z(!1)}},Ue=Y?`bg-muted/60 text-muted-foreground opacity-70`:``,We=oe(Z);return(0,p.jsxs)(`form`,{onSubmit:j(He),className:`space-y-2.5 pb-4`,children:[(0,p.jsx)(`input`,{type:`hidden`,...A(`translation_group_id`)}),(0,p.jsx)(`input`,{type:`hidden`,...A(`payment_provider`)}),(0,p.jsxs)(`div`,{className:`space-y-2.5 w-full`,children:[(0,p.jsxs)(`div`,{className:`rounded-lg border bg-card p-2.5 px-4 shadow-sm flex items-center justify-between gap-3 flex-wrap`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,p.jsxs)(`div`,{className:`flex h-9 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm font-bold whitespace-nowrap leading-none pt-0.5`,children:`Product Type`}),F.product_type&&(0,p.jsx)(d.AlertCircle,{className:`h-4 w-4 text-destructive`})]}),(0,p.jsx)(`div`,{className:`flex h-9 items-center`,children:(0,p.jsxs)(m.Select,{onValueChange:e=>M(`product_type`,e,{shouldDirty:!0,shouldValidate:!0}),value:H||void 0,children:[(0,p.jsx)(m.SelectTrigger,{className:`w-[160px] h-9 text-xs`,children:(0,p.jsx)(m.SelectValue,{placeholder:`Select Type`})}),(0,p.jsxs)(m.SelectContent,{children:[(0,p.jsx)(m.SelectItem,{value:`physical`,children:`Physical Product`}),(0,p.jsx)(m.SelectItem,{value:`digital`,children:`Digital Product`})]})]})})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-6`,children:[(0,p.jsxs)(`div`,{className:`flex h-9 items-center gap-3`,children:[(0,p.jsx)(`span`,{className:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider leading-none`,children:`Payment Provider`}),(0,p.jsx)(m.Badge,{variant:`outline`,className:`text-xs py-1 font-bold bg-muted/30 leading-none`,children:U?U===`stripe`?`Stripe`:`Freemius`:`—`})]}),U&&(0,p.jsx)(`div`,{className:`flex h-9 items-center gap-2`,children:De&&Oe?(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 text-emerald-600 text-[10px] font-bold bg-emerald-50 px-2 py-1 rounded-full border border-emerald-100 uppercase leading-none`,children:[(0,p.jsx)(d.CheckCircle2,{className:`h-3 w-3`}),`Ready`]}):(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 text-amber-600 text-[10px] font-bold bg-amber-50 px-2 py-1 rounded-full border border-amber-100 uppercase leading-none`,children:[(0,p.jsx)(d.AlertCircle,{className:`h-3 w-3`}),De?`Keys Missing`:`Disabled`]})}),!Oe&&U&&x[U].missing.length>0&&(0,p.jsxs)(`a`,{href:`/cms/payments`,className:`hidden xl:flex h-9 items-center gap-1 text-[10px] text-muted-foreground bg-muted/50 px-2 py-1 rounded border border-dashed leading-none hover:text-foreground hover:border-solid`,children:[(0,p.jsx)(d.Info,{className:`h-3 w-3`}),`Missing: `,x[U].missing.join(`, `),` — set up payments`]})]})]}),(0,p.jsxs)(h,{title:`Product Information`,hideHeader:!0,children:[t&&(0,p.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-muted-foreground pb-2 border-b border-border/40 mb-2.5`,children:[(0,p.jsx)(`span`,{className:`font-semibold text-[11px] uppercase tracking-wider text-muted-foreground/80`,children:`Product Settings`}),(0,p.jsx)(`div`,{className:`flex items-center gap-1.5 min-h-[16px]`,children:_e?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`div`,{className:`relative flex h-2 w-2`,children:[(0,p.jsx)(`span`,{className:`animate-ping absolute inline-flex h-full w-full rounded-full bg-amber-400 opacity-75`}),(0,p.jsx)(`span`,{className:`relative inline-flex rounded-full h-2 w-2 bg-amber-500`})]}),(0,p.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400 font-medium`,children:`Autosaving settings...`})]}):ve?(0,p.jsxs)(`span`,{className:`text-red-500 font-medium`,children:[`Error saving settings: `,ve]}):ye?(0,p.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-medium`,children:[`Settings autosaved at `,ye.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})]}):(0,p.jsx)(`span`,{className:`text-muted-foreground/60`,children:`Settings autosave in draft mode`})})]}),(0,p.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-2.5`,children:[(0,p.jsxs)(`div`,{className:`col-span-2 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`title`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Title`}),(0,p.jsx)(m.Input,{id:`title`,placeholder:`Product title`,...A(`title`),className:`h-8 text-sm`}),F.title&&(0,p.jsx)(`p`,{className:`text-destructive text-[11px] leading-none`,children:F.title.message})]}),(0,p.jsxs)(`div`,{className:`col-span-2 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`slug`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Slug`}),(0,p.jsx)(m.Input,{id:`slug`,placeholder:`product-slug`,...A(`slug`),className:`h-8 text-sm`}),F.slug&&(0,p.jsx)(`p`,{className:`text-destructive text-[11px] leading-none`,children:F.slug.message})]}),(0,p.jsxs)(`div`,{className:`col-span-1 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`sku`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`SKU`}),(0,p.jsx)(m.Input,{id:`sku`,placeholder:`SKU`,...A(`sku`),className:`h-8 text-sm font-mono`}),F.sku&&(0,p.jsx)(`p`,{className:`text-destructive text-[11px] leading-none`,children:F.sku.message})]}),(0,p.jsxs)(`div`,{className:`col-span-1 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`upc_ean`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`UPC / EAN`}),(0,p.jsx)(m.Input,{id:`upc_ean`,placeholder:`000000000`,...A(`upc`),className:`h-8 text-sm font-mono`,readOnly:Y})]})]}),(0,p.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 lg:grid-cols-12 gap-2.5 mt-2`,children:[(0,p.jsxs)(`div`,{className:`${t?`lg:col-span-3`:`lg:col-span-4`} col-span-2 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`meta_title`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Meta Title`}),(0,p.jsx)(m.Input,{id:`meta_title`,...A(`meta_title`),placeholder:`SEO page title (50-60 chars)`,className:`h-8 text-sm`})]}),(0,p.jsxs)(`div`,{className:`lg:col-span-4 col-span-2 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`meta_description`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Meta Description`}),(0,p.jsx)(m.Input,{id:`meta_description`,...A(`meta_description`),placeholder:`SEO description (150-160 chars)`,className:`h-8 text-sm`})]}),(0,p.jsxs)(`div`,{className:`${t?`lg:col-span-3`:`lg:col-span-4`} col-span-2 space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`custom_canonical`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Canonical URL (optional)`}),(0,p.jsx)(m.Input,{id:`custom_canonical`,...A(`custom_canonical`),placeholder:`Blank = self-referencing. Absolute https://… URL or /relative path to override.`,className:`h-8 text-sm`})]})]})]}),(0,p.jsx)(h,{title:`Product Categories`,description:`Assign this product to one or more categories.`,children:(0,p.jsx)(l.ProductCategorySelector,{categories:fe,selectedIds:N(`category_ids`)||[],onChange:e=>M(`category_ids`,e,{shouldDirty:!0,shouldValidate:!0})})}),(0,p.jsxs)(`section`,{className:`rounded-lg border bg-card p-3 shadow-sm space-y-3`,children:[W&&(0,p.jsxs)(`div`,{className:`flex items-center justify-between gap-4 flex-wrap border-b border-muted/50 pb-2`,children:[(0,p.jsx)(`div`,{className:`flex items-center gap-4`,children:(0,p.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,p.jsx)(`h2`,{className:`text-sm font-bold tracking-tight`,children:`Pricing & Inventory`}),(0,p.jsx)(`p`,{className:`text-[11px] text-muted-foreground leading-none`,children:`Manage simple or variant pricing.`})]})}),(0,p.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2 bg-muted/40 rounded-md px-2.5 py-1.5`,children:[(0,p.jsx)(`span`,{className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Stock`}),(0,p.jsx)(m.Input,{id:`stock`,type:`number`,min:`0`,...A(`stock`,{valueAsNumber:!0}),placeholder:`0`,readOnly:Y,className:`${Ue} h-8 w-20 text-sm text-center font-mono bg-background`})]}),Y?(0,p.jsx)(m.Badge,{variant:`secondary`,className:`text-[11px] py-0 px-2 h-5`,children:`Variant pricing`}):null]})]}),W?(0,p.jsxs)(`div`,{className:`space-y-3`,children:[(0,p.jsxs)(`div`,{className:`w-full`,children:[(0,p.jsx)(o.CurrencyPriceFields,{idPrefix:`product`,currencies:D,prices:X.prices,salePrices:X.salePrices,managedCurrencyCodes:k,onPriceChange:Re,onSalePriceChange:ze,onAutoFill:Be,readOnly:Y,helperText:Y?`Parent prices stay as a fallback, but active variants define the live shopper price.`:void 0,trailing:(0,p.jsx)(s.SaleScheduleFields,{idPrefix:`product`,startAt:N(`sale_start_at`),endAt:N(`sale_end_at`),onChange:(e,t)=>M(e,t,{shouldDirty:!0,shouldValidate:!0}),error:F.sale_end_at?.message,bare:!0})}),F.price&&(0,p.jsx)(`p`,{className:`text-destructive text-sm mt-1`,children:F.price.message}),F.sale_price&&(0,p.jsx)(`p`,{className:`text-destructive text-sm mt-1`,children:F.sale_price.message}),F.stock&&(0,p.jsx)(`p`,{className:`text-destructive text-[10px] font-medium leading-none mt-1`,children:F.stock.message})]}),(0,p.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded border border-dashed p-2.5 bg-muted/5`,children:[(0,p.jsx)(`span`,{className:`text-xs font-bold uppercase tracking-wider text-muted-foreground`,children:Y?`Variations Active`:`Variations`}),(0,p.jsx)(m.Button,{type:`button`,variant:T?`outline`:`default`,onClick:()=>E(e=>!e),size:`sm`,className:`h-7 text-xs px-3`,children:T?`Hide`:`Manage`})]}),T&&(0,p.jsx)(`div`,{className:`border-t pt-3`,children:(0,p.jsx)(ee.VariationsEditor,{globalAttributes:ce,currentLanguageCode:Pe,baseSku:N(`sku`)||``,basePrice:G||0,basePrices:q,baseSalePrice:typeof K==`number`?K:null,baseSalePrices:J,currencies:D,availableVariantImages:We,initialVariationAttributes:e?.variation_attributes,initialVariants:Fe,onChange:Ve})})]}):(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`div`,{className:`space-y-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-end gap-4 w-full`,children:[(0,p.jsxs)(`div`,{className:`flex-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`freemius_product_id`,className:`text-[11px] uppercase tracking-wider text-muted-foreground font-bold mb-1.5 block`,children:`Freemius Product ID`}),(0,p.jsx)(m.Input,{id:`freemius_product_id`,...A(`freemius_product_id`),className:`h-9`})]}),(0,p.jsxs)(`div`,{className:`flex-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`freemius_plan_id`,className:`text-[11px] uppercase tracking-wider text-muted-foreground font-bold mb-1.5 block`,children:`Freemius Plan ID`}),(0,p.jsx)(m.Input,{id:`freemius_plan_id`,...A(`freemius_plan_id`),className:`h-9`})]}),ke?(0,p.jsx)(a.SyncFreemiusPricingButton,{productId:N(`freemius_product_id`),hasOpenDraft:pe}):null]}),(0,p.jsxs)(`div`,{className:`bg-muted/10 border rounded-md overflow-hidden`,children:[(0,p.jsxs)(`div`,{className:`flex flex-wrap items-center gap-6 bg-muted/20 border-b p-2.5 px-4`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-[11px] font-bold uppercase tracking-wider text-muted-foreground`,children:`Free Trial`}),(0,p.jsxs)(m.Badge,{variant:`outline`,className:`font-mono text-xs shadow-sm bg-background`,children:[String(N(`trial_period_days`)||0),` Days`]})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-[11px] font-bold uppercase tracking-wider text-muted-foreground`,children:`Card Required`}),(0,p.jsx)(m.Badge,{variant:je?`default`:`secondary`,className:`text-xs shadow-sm`,children:je?`Yes`:`No`})]}),(0,p.jsx)(`span`,{className:`text-[10px] text-muted-foreground ml-auto`,children:`Managed in Freemius dashboard`}),(0,p.jsx)(`input`,{type:`hidden`,...A(`trial_period_days`,{valueAsNumber:!0})})]}),(0,p.jsxs)(`div`,{className:`w-full p-4 pt-3 space-y-2`,children:[(0,p.jsx)(o.CurrencyPriceFields,{idPrefix:`product`,currencies:D,prices:X.prices,salePrices:X.salePrices,managedCurrencyCodes:k,onPriceChange:Re,onSalePriceChange:ze,onAutoFill:Be,readOnly:!0,trailing:(0,p.jsx)(s.SaleScheduleFields,{idPrefix:`product`,startAt:N(`sale_start_at`),endAt:N(`sale_end_at`),onChange:(e,t)=>M(e,t,{shouldDirty:!0,shouldValidate:!0}),error:F.sale_end_at?.message,bare:!0})}),(0,p.jsx)(`p`,{className:`text-[10px] leading-snug text-muted-foreground`,children:`Scheduling a sale on a Freemius product generates a time-bounded Freemius coupon so the discount is enforced at Freemius checkout.`})]})]})]}),b&&(0,p.jsx)(`div`,{className:`pt-2 border-t`,children:b})]})]}),(0,p.jsx)(h,{title:`Product Description`,hideHeader:!0,children:(0,p.jsx)(`div`,{className:`space-y-2`,children:(0,p.jsxs)(`div`,{className:`space-y-1`,children:[(0,p.jsx)(m.Label,{htmlFor:`short_description`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Short Description`}),(0,p.jsx)(m.Input,{id:`short_description`,...A(`short_description`),placeholder:`Brief summary for product cards...`,className:`h-8 text-sm`})]})})}),(0,p.jsxs)(h,{title:`Media Gallery`,description:`Drag to reorder. First image is the hero.`,children:[(0,p.jsx)(i.ProductMediaManager,{initialMedia:Z,onUpdate:Le,mediaPickerNode:re}),(0,p.jsx)(`input`,{type:`hidden`,...A(`product_media`)})]}),!t&&(0,p.jsxs)(`div`,{className:`rounded-lg border bg-card p-3 px-4 shadow-sm flex items-center justify-between gap-3 flex-wrap`,children:[(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`New products start as a draft. Publish it from the top bar once it's ready.`}),(0,p.jsx)(m.Button,{disabled:C,type:`submit`,size:`sm`,className:`h-8 text-sm px-5`,children:C?`Saving...`:`Save Changes`})]})]})]})}exports.ProductForm=_;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js");let t=require("react");t=e.__toESM(t,1);let n=require("lucide-react"),r=require("react/jsx-runtime"),i=require("next/image");i=e.__toESM(i,1);var a=process.env.NEXT_PUBLIC_R2_BASE_URL||``,o=e=>e?e.startsWith(`http`)||!a?e:`${a.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`:``,s=({initialMedia:e,onUpdate:a,mediaPickerNode:s})=>{let[c,l]=(0,t.useState)(e),u=(0,t.useRef)(null),d=(0,t.useRef)(null);(0,t.useEffect)(()=>{l(e)},[e]);let f=(e,t)=>{u.current=t,e.dataTransfer.effectAllowed=`move`},p=(e,t)=>{d.current=t,e.preventDefault()},m=e=>{e.preventDefault()},h=e=>{if(e.preventDefault(),u.current===null||d.current===null)return;let t=[...c],n=t[u.current];t.splice(u.current,1),t.splice(d.current,0,n),u.current=null,d.current=null;let r=t.map((e,t)=>({...e,sort_order:t}));l(r),a(r)},g=e=>{if(!e||c.some(t=>t.media_id===e.id))return;let t={id:`temp-${Date.now()}`,media_id:e.id,file_path:e.file_path||e.object_key,alt:e.description||e.file_name||``,sort_order:c.length,isNew:!0},n=[...c,t];l(n),a(n)},_=e=>{let t=c.filter((t,n)=>n!==e).map((e,t)=>({...e,sort_order:t}));l(t),a(t)};return(0,r.jsxs)(`div`,{className:`space-y-4`,children:[(0,r.jsxs)(`div`,{className:`grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4`,children:[c.map((e,t)=>(0,r.jsxs)(`div`,{className:`group relative aspect-square bg-muted/40 rounded-lg border overflow-hidden cursor-move transition-all hover:shadow-md`,draggable:!0,onDragStart:e=>f(e,t),onDragEnter:e=>p(e,t),onDragOver:m,onDrop:h,children:[t===0&&(0,r.jsx)(`div`,{className:`absolute top-2 left-2 z-10 bg-primary text-primary-foreground text-[10px] font-bold px-2 py-0.5 rounded shadow-sm`,children:`MAIN`}),(0,r.jsx)(`button`,{type:`button`,onClick:()=>_(t),className:`absolute top-1 right-1 z-20 p-1 bg-destructive/90 text-destructive-foreground rounded-full opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,r.jsx)(n.X,{className:`w-3 h-3`})}),(0,r.jsx)(`div`,{className:`absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors pointer-events-none`}),(0,r.jsx)(`div`,{className:`absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,r.jsx)(n.GripVertical,{className:`w-4 h-4 text-white drop-shadow-md`})}),o(e.file_path)?(0,r.jsx)(i.default,{src:o(e.file_path),alt:e.alt,fill:!0,className:`object-cover`,sizes:`(max-width: 768px) 50vw, 33vw`}):(0,r.jsx)(`div`,{className:`flex h-full w-full items-center justify-center text-muted-foreground`,children:(0,r.jsx)(n.Image,{className:`w-8 h-8 opacity-30`})})]},e.id)),s?t.default.cloneElement(s,{onSelect:g,children:(0,r.jsxs)(`button`,{type:`button`,className:`group relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground hover:bg-muted/20 hover:border-muted-foreground/50 transition-all focus:outline-none focus:ring-2 focus:ring-primary`,children:[(0,r.jsx)(n.Image,{className:`w-8 h-8 mb-2 opacity-50 group-hover:opacity-75 transition-opacity`}),(0,r.jsx)(`span`,{className:`text-sm font-medium`,children:`Add Image`})]})}):(0,r.jsxs)(`div`,{className:`relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground`,children:[(0,r.jsx)(n.Image,{className:`w-8 h-8 mb-2 opacity-30`}),(0,r.jsx)(`span`,{className:`text-xs text-center px-2`,children:`Media Picker not injected`})]})]}),(0,r.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Drag and drop images to reorder. The first image will be used as the main product image.`})]})};exports.ProductMediaManager=s;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("./DeleteProductButton.cjs.js");let n=require("next/link");n=e.__toESM(n,1);let r=require("react"),i=require("lucide-react"),a=require("@nextblock-cms/utils"),o=require("react/jsx-runtime"),s=require("next/navigation"),c=require("next/image");c=e.__toESM(c,1);let l=require("@nextblock-cms/ui");var u=process.env.NEXT_PUBLIC_R2_BASE_URL||``;function d(e){return e?e.startsWith(`http`)||!u?e:`${u.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`:null}function f({products:e,languageLabels:u,defaultCurrencyCode:f,deleteProductAction:p,bulkDeleteProductsAction:m,bulkDraftProductsAction:h}){let g=(0,s.useRouter)(),[_,v]=(0,r.useState)(()=>new Set),[y,b]=(0,r.useState)(``),[x,S]=(0,r.useState)(null),[C,w]=(0,r.useState)(null),[T,E]=(0,r.useTransition)(),D=(0,r.useMemo)(()=>{let t=y.trim().toLowerCase();return t?e.filter(e=>{let n=u[String(e.language_id)]||``;return[e.title,e.sku,e.slug,e.status,n].filter(Boolean).join(` `).toLowerCase().includes(t)}):e},[u,e,y]),[O,k]=(0,r.useState)(1),[A,j]=(0,r.useState)(25);(0,r.useEffect)(()=>{k(1)},[y]);let M=D.length,N=Math.max(1,Math.ceil(M/A)),P=Math.min(O,N),F=(0,r.useMemo)(()=>{let e=(P-1)*A;return D.slice(e,e+A)},[D,P,A]),I=(0,r.useMemo)(()=>e.map(e=>e.id),[e]),L=(0,r.useMemo)(()=>F.map(e=>e.id),[F]),R=(0,r.useMemo)(()=>e.filter(e=>_.has(e.id)),[e,_]).length,z=R>1,B=L.filter(e=>_.has(e)).length,V=L.length>0&&L.every(e=>_.has(e)),H=B>0&&!V;(0,r.useEffect)(()=>{let e=new Set(I);v(t=>{let n=new Set(Array.from(t).filter(t=>e.has(t)));return n.size===t.size?t:n})},[I]);let U=e=>{v(t=>{let n=new Set(t);return e?L.forEach(e=>n.add(e)):L.forEach(e=>n.delete(e)),n})},W=(e,t)=>{v(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},G=(e,t,n)=>{if(R===0){S(`Select at least one product first.`);return}window.confirm(t)&&(S(null),w(e),E(async()=>{try{let e=await n(Array.from(_));if(!e.success){S(e.error||`Bulk action failed. Please try again.`),w(null);return}v(new Set),g.refresh()}catch(e){console.error(`Bulk product action failed:`,e),S(`Bulk action failed. Please try again.`)}finally{w(null)}}))};return(0,o.jsxs)(`div`,{className:`rounded-lg border overflow-hidden dark:border-slate-700`,children:[(0,o.jsxs)(`div`,{className:`flex min-h-14 flex-wrap items-center justify-between gap-3 border-b bg-muted/20 px-4 py-3`,children:[(0,o.jsxs)(`div`,{className:`flex min-w-[260px] flex-1 flex-wrap items-center gap-3`,children:[(0,o.jsxs)(`div`,{className:`relative w-full max-w-sm`,children:[(0,o.jsx)(i.Search,{className:`pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,o.jsx)(l.Input,{value:y,onChange:e=>b(e.target.value),placeholder:`Search products...`,className:`h-9 pl-9`,"aria-label":`Search products`})]}),R>0?(0,o.jsxs)(`span`,{className:`text-sm font-medium text-foreground`,children:[R,` selected`]}):null,x?(0,o.jsx)(`span`,{className:`text-sm text-destructive`,children:x}):null]}),z?(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,o.jsxs)(l.Button,{variant:`outline`,size:`sm`,disabled:T,onClick:()=>G(`Moving to draft...`,`Move ${R} selected products to draft?`,h),children:[(0,o.jsx)(i.Archive,{className:`mr-2 h-4 w-4`}),C===`Moving to draft...`?C:`Set Draft`]}),(0,o.jsxs)(l.Button,{variant:`destructive`,size:`sm`,disabled:T,onClick:()=>G(`Deleting...`,`Delete ${R} selected products? This action cannot be undone.`,m),children:[(0,o.jsx)(i.Trash2,{className:`mr-2 h-4 w-4`}),C===`Deleting...`?C:`Delete`]})]}):null]}),(0,o.jsxs)(l.Table,{children:[(0,o.jsx)(l.TableHeader,{children:(0,o.jsxs)(l.TableRow,{children:[(0,o.jsx)(l.TableHead,{className:`w-12`,children:(0,o.jsx)(l.Checkbox,{checked:V?!0:H?`indeterminate`:!1,onCheckedChange:e=>U(e===!0),"aria-label":`Select all products on this page`})}),(0,o.jsx)(l.TableHead,{children:`Image`}),(0,o.jsx)(l.TableHead,{children:`Title`}),(0,o.jsx)(l.TableHead,{children:`SKU`}),(0,o.jsx)(l.TableHead,{children:`Price`}),(0,o.jsx)(l.TableHead,{children:`Language`}),(0,o.jsx)(l.TableHead,{children:`SEO`}),(0,o.jsx)(l.TableHead,{children:`Stock`}),(0,o.jsx)(l.TableHead,{children:`Status`}),(0,o.jsx)(l.TableHead,{className:`text-right`,children:`Actions`})]})}),(0,o.jsx)(l.TableBody,{children:F.length>0?F.map(e=>{let r=d(e.product_media?.[0]?.media?.file_path||e.product_media?.[0]?.media?.object_key);return(0,o.jsxs)(l.TableRow,{"data-state":_.has(e.id)?`selected`:void 0,children:[(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.Checkbox,{checked:_.has(e.id),onCheckedChange:t=>W(e.id,t===!0),"aria-label":`Select ${e.title}`})}),(0,o.jsx)(l.TableCell,{children:r?(0,o.jsx)(c.default,{src:r,alt:e.title,width:40,height:40,className:`w-10 h-10 object-cover rounded`}):(0,o.jsx)(`div`,{className:`w-10 h-10 bg-gray-200 rounded flex items-center justify-center text-xs text-gray-500`,children:`No Img`})}),(0,o.jsx)(l.TableCell,{className:`font-medium`,children:(0,o.jsx)(n.default,{href:`/cms/products/${e.id}/edit`,className:`hover:underline`,children:e.title})}),(0,o.jsx)(l.TableCell,{children:e.sku}),(0,o.jsx)(l.TableCell,{children:(0,o.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,o.jsx)(`span`,{className:e.sale_price?`font-semibold text-primary`:``,children:typeof(e.sale_price??e.price)==`number`?(0,a.formatPrice)(e.sale_price??e.price??0,f):`N/A`}),e.sale_price?(0,o.jsx)(`span`,{className:`text-sm text-muted-foreground line-through`,children:(0,a.formatPrice)(e.price??0,f)}):null]})}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.Badge,{variant:`outline`,children:u[String(e.language_id)]||`N/A`})}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.SeoScoreBadge,{score:e.seo_score})}),(0,o.jsx)(l.TableCell,{children:e.stock}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(`span`,{className:`px-2 py-1 rounded text-xs ${e.status===`active`?`bg-green-100 text-green-800`:e.status===`archived`?`bg-gray-100 text-gray-800`:`bg-yellow-100 text-yellow-800`}`,children:e.status})}),(0,o.jsxs)(l.TableCell,{className:`text-right flex justify-end gap-2 items-center`,children:[e.slug?(0,o.jsx)(n.default,{href:`/product/${e.slug}`,target:`_blank`,rel:`noopener noreferrer`,children:(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,children:`View Product`})}):null,(0,o.jsx)(n.default,{href:`/cms/products/${e.id}/edit`,children:(0,o.jsx)(l.Button,{variant:`ghost`,size:`sm`,children:`Edit`})}),(0,o.jsx)(t.DeleteProductButton,{productName:e.title,isIcon:!0,deleteAction:()=>p(e.id)})]})]},e.id)}):(0,o.jsx)(l.TableRow,{children:(0,o.jsx)(l.TableCell,{colSpan:10,className:`text-center py-10`,children:e.length===0?`No products found.`:`No products match your search.`})})})]}),M>0&&(0,o.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-center justify-between gap-4 px-2 py-4 text-sm text-muted-foreground`,children:[(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`span`,{children:`Rows per page:`}),(0,o.jsxs)(l.Select,{value:String(A),onValueChange:e=>{j(Number(e)),k(1)},children:[(0,o.jsx)(l.SelectTrigger,{className:`h-8 w-[70px]`,children:(0,o.jsx)(l.SelectValue,{placeholder:String(A)})}),(0,o.jsx)(l.SelectContent,{side:`top`,children:[10,25,50,100].map(e=>(0,o.jsx)(l.SelectItem,{value:String(e),children:e},e))})]}),(0,o.jsxs)(`span`,{className:`ml-2`,children:[`Showing `,(P-1)*A+1,` to `,Math.min(P*A,M),` of `,M,` products`]})]}),(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsxs)(`span`,{children:[`Page `,P,` of `,N]}),(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>k(e=>Math.max(1,e-1)),disabled:P<=1,"aria-label":`Previous page`,children:(0,o.jsx)(i.ChevronLeft,{className:`h-4 w-4`})}),(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>k(e=>Math.min(N,e+1)),disabled:P>=N,"aria-label":`Next page`,children:(0,o.jsx)(i.ChevronRight,{className:`h-4 w-4`})})]})]})]})}exports.ProductsBulkTable=f;
@@ -1 +0,0 @@
1
- "use client";const e=require("../actions.cjs.js");let t=require("react"),n=require("lucide-react"),r=require("react/jsx-runtime"),i=require("sonner"),a=require("@nextblock-cms/ui");function o({title:o=`Sync Full Store`}){let[s,c]=(0,t.useState)(!1);return(0,r.jsxs)(a.Button,{variant:`secondary`,onClick:async()=>{c(!0);try{let t=await e.triggerFreemiusSync();t.error?i.toast.error(t.error):i.toast.success(`Full store sync complete! Found ${t.data?.count||0} products.`)}catch(e){i.toast.error(e.message||`An unexpected error occurred during sync`)}finally{c(!1)}},disabled:s,className:`gap-2`,children:[(0,r.jsx)(n.RefreshCw,{className:`w-4 h-4 ${s?`animate-spin`:``}`}),s?`Syncing...`:o]})}exports.SyncFreemiusButton=o;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../../../currency.cjs.js"),n=require("../../../../variation-utils.cjs.js"),r=require("./CurrencyPriceFields.cjs.js"),i=require("./SaleScheduleFields.cjs.js"),a=require("../product-price-sync.cjs.js");let o=require("next/link");o=e.__toESM(o,1);let s=require("react"),c=require("@nextblock-cms/utils"),l=require("react/jsx-runtime"),u=require("@nextblock-cms/ui");var d=process.env.NEXT_PUBLIC_R2_BASE_URL||``,f=process.env.NEXT_PUBLIC_SUPABASE_URL||``,p=e=>e.startsWith(`http`)?e:d?`${d.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`:f?`${f.replace(/\/+$/,``)}/storage/v1/object/public/media/${e.replace(/^\/+/,``)}`:e;function m(e,t=`USD`){return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t}).format(e)}function h(e){return Object.entries(e).filter(([,e])=>e.length>0).map(([e,t])=>({attribute_id:e,term_ids:t}))}function g({globalAttributes:e,currentLanguageCode:d,baseSku:f,basePrice:g,basePrices:_,baseSalePrice:v,baseSalePrices:y,currencies:b,availableVariantImages:x=[],initialVariationAttributes:S,initialVariants:C,onChange:w}){let[T,E]=(0,s.useState)(()=>S&&S.length>0?S.reduce((e,t)=>(e[t.attribute_id]=t.term_ids,e),{}):n.extractSelectedTermsByAttribute(C||[])),[D,O]=(0,s.useState)(a.sanitizeVariantDraftsForStoreManagedCurrencies(C||[],b)),k=(0,s.useMemo)(()=>e.map(e=>({attribute_id:e.id,attribute_name:n.resolveAttributeName(e,d),terms:e.terms.filter(t=>(T[e.id]||[]).includes(t.id)).map(e=>({...e,value:n.resolveTermValue(e,d)}))})).filter(e=>e.terms.length>0),[d,e,T]);(0,s.useEffect)(()=>{if(k.length===0){O([]);return}O(e=>a.sanitizeVariantDraftsForStoreManagedCurrencies(n.generateVariantDrafts({baseSku:f,basePrice:g,basePrices:t.normalizePriceMap(_),baseSalePrice:v,baseSalePrices:t.normalizeSalePriceMap(y),selectedAttributes:k,previousVariants:e}),b))},[g,_,v,y,f,b,k]),(0,s.useEffect)(()=>{w({variationAttributes:h(T),variants:D})},[w,T,D]);let A=D.reduce((e,t)=>e+(t.stock_quantity||0),0),j=b.find(e=>e.is_default)??b[0],M=(0,s.useMemo)(()=>a.getStoreManagedPriceCurrencyCodes(b),[b]),N=(e,t)=>{E(n=>{let r=new Set(n[e]||[]);return r.has(t)?r.delete(t):r.add(t),{...n,[e]:[...r]}})},P=(e,t,n)=>{O(r=>r.map(r=>{if(r.combination_key!==e)return r;if(t===`sku`)return{...r,sku:n};if(t===`upc`)return{...r,upc:n};if(t===`sale_price`&&n===``)return{...r,sale_price:null};if(t===`prices`||t===`sale_prices`)return r;let i=n===``?0:Number(n);return{...r,[t]:Number.isFinite(i)?i:0}}))},F=(e,t,n)=>{O(r=>r.map(r=>r.combination_key===e?{...r,[t]:n}:r))},I=(e,t,n,r)=>{let i=b.find(e=>e.is_default)??b[0];O(a=>a.map(a=>{if(a.combination_key!==e)return a;let o={...n===`prices`?a.prices:a.sale_prices,[t]:r};return{...a,[n]:o,...t===i?.code?n===`prices`?{price:r??0}:{sale_price:r}:{}}}))},L=e=>{let n=b.find(e=>e.is_default)??b[0],r=new Set(M);n&&O(i=>i.map(i=>{if(i.combination_key!==e)return i;let a=b.reduce((e,a)=>{if(a.code!==n.code&&r.has(a.code))return e;let o=t.convertMinorUnitAmount({amount:(0,c.majorUnitAmountToMinor)(i.price,n.code),fromCurrencyCode:n.code,toCurrencyCode:a.code,currencies:b,applyRounding:!0});return e[a.code]=(0,c.minorUnitAmountToMajor)(o,a.code),e},{}),o=b.reduce((e,a)=>{if(a.code!==n.code&&r.has(a.code))return e;if(typeof i.sale_price!=`number`)return e[a.code]=null,e;let o=t.convertMinorUnitAmount({amount:(0,c.majorUnitAmountToMinor)(i.sale_price,n.code),fromCurrencyCode:n.code,toCurrencyCode:a.code,currencies:b,applyRounding:!0});return e[a.code]=(0,c.minorUnitAmountToMajor)(o,a.code),e},{});return{...i,prices:a,sale_prices:o}}))},R=(e,t)=>{let n=x.find(e=>e.media_id===t);if(!n)return;let r=n.file_path,i=p(r);O(t=>t.map(t=>t.combination_key===e?{...t,main_media_id:n.media_id,main_image_url:i}:t))},z=e=>{O(t=>t.map(t=>t.combination_key===e?{...t,main_media_id:null,main_image_url:null}:t))};return e.length===0?(0,l.jsxs)(`div`,{className:`rounded-lg border border-dashed p-6 text-sm text-muted-foreground`,children:[`No global attributes have been created yet. Create them first in`,` `,(0,l.jsx)(o.default,{href:`/cms/products/attributes`,className:`font-medium text-primary underline-offset-4 hover:underline`,children:`Attribute Management`}),`.`]}):(0,l.jsxs)(`div`,{className:`space-y-3`,children:[(0,l.jsxs)(`div`,{className:`space-y-2`,children:[(0,l.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,l.jsx)(`span`,{className:`text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none`,children:`Attributes`}),(0,l.jsxs)(u.Badge,{variant:`outline`,className:`text-[10px] px-1.5 h-4`,children:[D.length,` variants`]}),(0,l.jsxs)(u.Badge,{variant:`secondary`,className:`text-[10px] px-1.5 h-4`,children:[`Stock: `,A]})]}),(0,l.jsx)(u.Button,{asChild:!0,variant:`outline`,size:`sm`,className:`h-7 text-xs px-3`,children:(0,l.jsx)(o.default,{href:`/cms/products/attributes`,children:`Manage`})})]}),(0,l.jsx)(`div`,{className:`grid gap-2 lg:grid-cols-2`,children:e.map(e=>{let t=T[e.id]||[];return(0,l.jsxs)(`div`,{className:`flex items-center gap-3 rounded border p-2.5`,children:[(0,l.jsxs)(`div`,{className:`shrink-0 w-[100px]`,children:[(0,l.jsx)(`span`,{className:`text-sm font-bold block leading-tight`,children:n.resolveAttributeName(e,d)}),(0,l.jsxs)(`span`,{className:`text-[10px] text-muted-foreground leading-none`,children:[t.length,` selected`]})]}),(0,l.jsx)(`div`,{className:`flex flex-wrap gap-1.5 flex-1`,children:e.terms.map(r=>{let i=t.includes(r.id);return(0,l.jsx)(`button`,{type:`button`,onClick:()=>N(e.id,r.id),className:`rounded-full border px-2.5 py-0.5 text-[11px] font-medium transition-colors ${i?`border-primary bg-primary/10 text-primary`:`border-border bg-background text-foreground hover:border-primary/40`}`,children:n.resolveTermValue(r,d)},r.id)})})]},e.id)})})]}),D.length===0?(0,l.jsx)(`div`,{className:`rounded border border-dashed p-3 text-xs text-muted-foreground text-center`,children:`Select terms above to generate variations.`}):(0,l.jsx)(`div`,{className:`space-y-2`,children:D.map(e=>{let t=a.resolveEditorCurrencyPriceMaps({currencies:b,prices:e.prices||{},salePrices:e.sale_prices||{},fallbackPrice:e.price,fallbackSalePrice:e.sale_price});return(0,l.jsxs)(`div`,{className:`rounded border p-3 space-y-2`,children:[(0,l.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(`span`,{className:`text-sm font-bold`,children:e.label}),(0,l.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.selected_options.map(e=>`${e.attribute_name}: ${e.term_value}`).join(` · `)})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,l.jsxs)(`span`,{children:[`Reg: `,m(e.price,j?.code||`USD`)]}),(0,l.jsxs)(`span`,{children:[`Sale:`,` `,e.sale_price!==null&&e.sale_price!==void 0?m(e.sale_price,j?.code||`USD`):`—`]})]})]}),(0,l.jsxs)(`div`,{className:`grid grid-cols-3 gap-2.5`,children:[(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(u.Label,{htmlFor:`variant-sku-${e.combination_key}`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider shrink-0`,children:`SKU`}),(0,l.jsx)(u.Input,{id:`variant-sku-${e.combination_key}`,value:e.sku,onChange:t=>P(e.combination_key,`sku`,t.target.value),placeholder:`SKU`,className:`h-8 text-sm font-mono`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(u.Label,{htmlFor:`variant-upc-${e.combination_key}`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider shrink-0`,children:`UPC`}),(0,l.jsx)(u.Input,{id:`variant-upc-${e.combination_key}`,value:e.upc??``,onChange:t=>P(e.combination_key,`upc`,t.target.value),placeholder:`—`,className:`h-8 text-sm font-mono`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(u.Label,{htmlFor:`variant-stock-${e.combination_key}`,className:`text-xs uppercase font-bold text-muted-foreground tracking-wider shrink-0`,children:`Qty`}),(0,l.jsx)(u.Input,{id:`variant-stock-${e.combination_key}`,type:`number`,min:`0`,value:e.stock_quantity,onChange:t=>P(e.combination_key,`stock_quantity`,t.target.value),className:`h-8 text-sm font-mono w-20`})]})]}),(0,l.jsx)(r.CurrencyPriceFields,{idPrefix:`variant-${e.combination_key}`,currencies:b,prices:t.prices,salePrices:t.salePrices,managedCurrencyCodes:M,onPriceChange:(t,n)=>I(e.combination_key,t,`prices`,n),onSalePriceChange:(t,n)=>I(e.combination_key,t,`sale_prices`,n),onAutoFill:()=>L(e.combination_key),helperText:M.length>0?`Store-managed currencies derive from ${j?.code||`the base currency`}.`:void 0,trailing:(0,l.jsx)(i.SaleScheduleFields,{idPrefix:`variant-${e.combination_key}`,startAt:e.sale_start_at,endAt:e.sale_end_at,onChange:(t,n)=>F(e.combination_key,t,n),bare:!0})}),(0,l.jsxs)(`div`,{className:`flex items-center gap-3 pt-1.5 border-t border-muted/30`,children:[e.main_image_url&&(0,l.jsx)(`div`,{className:`h-9 w-9 overflow-hidden rounded border bg-background shrink-0`,children:(0,l.jsx)(`img`,{src:e.main_image_url,alt:`${e.label} image`,className:`h-full w-full object-cover`})}),(0,l.jsx)(`span`,{className:`text-xs uppercase font-bold text-muted-foreground tracking-wider shrink-0`,children:`Image`}),x.length>0?(0,l.jsxs)(`select`,{className:`flex h-8 rounded-md border border-input bg-background px-2 py-1 text-sm min-w-[180px]`,value:e.main_media_id??``,onChange:t=>{if(!t.target.value){z(e.combination_key);return}R(e.combination_key,t.target.value)},children:[(0,l.jsx)(`option`,{value:``,children:`Use parent image`}),x.map((e,t)=>(0,l.jsx)(`option`,{value:e.media_id,children:e.alt?.trim()||`Gallery image ${t+1}`},e.media_id))]}):(0,l.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Add gallery images first.`}),e.main_media_id&&(0,l.jsx)(u.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs px-2 text-muted-foreground hover:text-destructive`,onClick:()=>z(e.combination_key),children:`Remove`})]})]},e.combination_key)})})]})}exports.VariationsEditor=g;
@@ -1 +0,0 @@
1
- const e=require("./ProductsPage.cjs.js"),t=require("./inventory/InventoryPage.cjs.js"),n=require("./attributes/AttributeManagementPage.cjs.js"),r=require("./new/NewProductPage.cjs.js"),i=require("./_id_/edit/EditProductPage.cjs.js"),a=require("./components/CopyProductFromLanguage.cjs.js"),o=require("./categories/CategoryManagementPage.cjs.js");exports.AttributeManagementPage=n.AttributeManagementPage,exports.CategoryManagementPage=o.CategoryManagementPage,exports.CopyProductFromLanguage=a.CopyProductFromLanguage,exports.EditProductPage=i.EditProductPage,exports.InventoryPage=t.InventoryPage,exports.NewProductPage=r.NewProductPage,exports.ProductsPage=e.ProductsPage;
@@ -1 +0,0 @@
1
- const e=require("../../../../shared-inventory.cjs.js"),t=require("./InventoryTableClient.cjs.js");let n=require("react/jsx-runtime");async function r(){let r=await e.getInventoryItems();return(0,n.jsxs)(`div`,{className:`p-8 space-y-6`,children:[(0,n.jsxs)(`div`,{className:`space-y-2`,children:[(0,n.jsx)(`h1`,{className:`text-3xl font-bold`,children:`Inventory`}),(0,n.jsx)(`p`,{className:`max-w-3xl text-sm text-muted-foreground`,children:`Manage source-of-truth stock for every sellable SKU in one place. Matching SKUs share the same quantity across products, translations, and variants, and you can update those shared quantities inline or in bulk through CSV import and export.`})]}),(0,n.jsx)(t.InventoryTableClient,{initialItems:r})]})}exports.InventoryPage=r;
@@ -1 +0,0 @@
1
- const e=require("../../../../currency.cjs.js"),t=require("../../../../variation-utils.cjs.js"),n=require("../actions.cjs.js"),r=require("../server-actions.cjs.js"),i=require("../components/ProductForm.cjs.js"),a=require("../../payments/queries.cjs.js");let o=require("@nextblock-cms/utils"),s=require("react/jsx-runtime"),c=require("@nextblock-cms/db/server");async function l({mediaPickerNode:l,availableLanguagesProp:u,translationGroupId:d,targetLanguageId:f,initialData:p}){let[m,h,g,_]=await Promise.all([a.getEnabledPaymentProviders(),a.getStoreConfigStatus(),n.getGlobalProductAttributes(),(0,c.getServiceRoleSupabaseClient)().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}).then(e=>e.data||[])]),v=(_||[]).map(t=>e.normalizeCurrencyRecord(t)),y=(g||[]).map(e=>({id:e.id,name:e.name,name_translations:e.name_translations||{},slug:e.slug,terms:(e.product_attribute_terms||[]).map(e=>({...e,value_translations:e.value_translations||{}}))})),b=u.find(e=>e.id===p?.language_id)?.code||u.find(e=>e.id===(f?parseInt(f,10):void 0))?.code||u.find(e=>e.is_default)?.code,{attributes:x,variants:S}=t.mapRawVariantRelations(p?.product_variants||[],b),C=p&&{...p,variation_attributes:p.variation_attributes||x.map(e=>({attribute_id:e.id,term_ids:e.terms.map(e=>e.id)})),variants:p.variants||S.map(e=>({...e,upc:e.upc??null,price:e.price/100,prices:Object.entries(e.prices||{}).reduce((e,[t,n])=>(e[t]=(0,o.minorUnitAmountToMajor)(n,t),e),{}),sale_price:typeof e.sale_price==`number`?e.sale_price/100:null,sale_prices:Object.entries(e.sale_prices||{}).reduce((e,[t,n])=>(e[t]=typeof n==`number`?(0,o.minorUnitAmountToMajor)(n,t):null,e),{}),main_media_id:e.main_media_id??null,main_image_url:e.image_url??null}))};return(0,s.jsx)(`div`,{className:`p-8`,children:(0,s.jsx)(i.ProductForm,{mediaPickerNode:l,availableLanguagesProp:u,globalAttributesProp:y,currenciesProp:v,translationGroupId:d,targetLanguageId:f,initialData:C,enabledProviders:m,configStatus:h,createAction:r.createProductAction})})}exports.NewProductPage=l;
@@ -1 +0,0 @@
1
- const e=require("../../../currency.cjs.js");let t=require("@nextblock-cms/utils");function n(e){return Object.entries(e||{}).reduce((e,[n,r])=>(typeof r==`number`&&Number.isFinite(r)&&r>=0?e[(0,t.normalizeCurrencyCode)(n)]=r:r===null&&(e[(0,t.normalizeCurrencyCode)(n)]=null),e),{})}function r(t){let n=e.normalizeCurrencyRecord(t);return n.is_default!==!0&&n.auto_sync_product_prices===!0}function i(t){return t.map(t=>e.normalizeCurrencyRecord(t)).filter(e=>r(e)).map(e=>e.code)}function a(e,t){let r=new Set(i(t)),a=n(e);return Object.entries(a).reduce((e,[t,n])=>(r.has(t)||(e[t]=n),e),{})}function o(n){let{baseAmount:r,defaultCurrencyCode:i,targetCurrencyCode:a,currencies:o}=n;if(typeof r!=`number`||!Number.isFinite(r)||r<0)return null;let s=e.convertMinorUnitAmount({amount:(0,t.majorUnitAmountToMinor)(r,i),fromCurrencyCode:i,toCurrencyCode:a,currencies:o,applyRounding:!0});return(0,t.minorUnitAmountToMajor)(s,a)}function s(i){let{currencies:a,fallbackPrice:s,fallbackSalePrice:c}=i,l=n(i.prices),u=n(i.salePrices),d=a.find(e=>e.is_default)??a[0];if(!d)return{prices:l,salePrices:u};let f=(0,t.normalizeCurrencyCode)(d.code),p=l[f]??(typeof s==`number`?s:null),m=u[f]??(typeof c==`number`?c:null);return{prices:a.reduce((t,n)=>{let i=e.normalizeCurrencyRecord(n);return r(i)?(t[i.code]=o({baseAmount:p,defaultCurrencyCode:f,targetCurrencyCode:i.code,currencies:a}),t):(t[i.code]=l[i.code]??(i.code===f?p:void 0),t)},{}),salePrices:a.reduce((t,n)=>{let i=e.normalizeCurrencyRecord(n);return r(i)?(t[i.code]=o({baseAmount:m,defaultCurrencyCode:f,targetCurrencyCode:i.code,currencies:a}),t):(t[i.code]=u[i.code]??(i.code===f?m:void 0),t)},{})}}function c(e,n){let r=n.find(e=>e.is_default)??n[0],i=r?(0,t.normalizeCurrencyCode)(r.code):`USD`,o=a(e.prices,n),s=a(e.sale_prices,n);return{...e,price:typeof o[i]==`number`?o[i]:e.price,prices:o,sale_price:typeof s[i]==`number`?s[i]:e.sale_price??null,sale_prices:s}}function l(e,t){return e?.map(e=>c(e,t))||[]}function u(e,n){let r=n.find(e=>e.is_default)??n[0],i=r?(0,t.normalizeCurrencyCode)(r.code):`USD`,o=a(e.prices,n),s=a(e.sale_prices,n);return{...e,price:typeof o[i]==`number`?o[i]:e.price,prices:o,sale_price:typeof s[i]==`number`?s[i]:e.sale_price??null,sale_prices:s,variants:l(e.variants,n)}}exports.getStoreManagedPriceCurrencyCodes=i,exports.isCurrencyStoreManagedPrice=r,exports.resolveEditorCurrencyPriceMaps=s,exports.sanitizeProductFormValuesForStoreManagedCurrencies=u,exports.sanitizeVariantDraftForStoreManagedCurrencies=c,exports.sanitizeVariantDraftsForStoreManagedCurrencies=l;
@@ -1 +0,0 @@
1
- "use server";const e=require("../../../currency.cjs.js"),t=require("../../../product-actions.cjs.js"),n=require("./product-price-sync.cjs.js"),r=require("../../../freemius-coupons.cjs.js");let i=require("@nextblock-cms/db/server"),a=require("next/navigation"),o=require("next/cache");function s(e){return e.toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)}async function c(s){let c=(0,i.createClient)(),{data:l}=await c.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}),u=n.sanitizeProductFormValuesForStoreManagedCurrencies(s,(l||[]).map(t=>e.normalizeCurrencyRecord(t))),d=await t.createProduct(c,u);if(u.payment_provider===`freemius`&&d?.id)try{await r.syncProductSaleCouponToFreemius({productId:d.id,client:(0,i.getServiceRoleSupabaseClient)()})}catch(e){console.error(`Failed to sync Freemius sale coupon on create:`,e)}(0,o.revalidatePath)(`/cms/products`),(0,a.redirect)(`/cms/products`)}async function l(e,t,n,r){let i={author_id:n,meta:r,updated_at:new Date().toISOString()},a=async()=>{let{error:n}=await e.from(`product_drafts`).update(i).eq(`product_id`,t);if(n)throw Error(`Failed to save product draft: ${n.message}`)},{data:o,error:s}=await e.from(`product_drafts`).select(`id`).eq(`product_id`,t).maybeSingle();if(s)throw Error(`Failed to read product draft: ${s.message}`);if(o){await a();return}let{data:c,error:l}=await e.from(`blocks`).select(`id, page_id, post_id, product_id, language_id, block_type, content, order, created_at, updated_at`).eq(`product_id`,t).order(`order`,{ascending:!0});if(l)throw Error(`Failed to read product blocks: ${l.message}`);let{error:u}=await e.from(`product_drafts`).insert({...i,blocks:c??[],product_id:t});if(u){if(u.code===`23505`){await a();return}throw Error(`Failed to save product draft: ${u.message}`)}}async function u(t,r){let a=(0,i.createClient)(),{data:{user:o}}=await a.auth.getUser();if(!o)throw Error(`User not authenticated.`);let{data:s}=await a.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}),c=n.sanitizeProductFormValuesForStoreManagedCurrencies(r,(s||[]).map(t=>e.normalizeCurrencyRecord(t)));return await l(a,t,o.id,c),{success:!0}}async function d(e){let n=(0,i.createClient)();await t.deleteProduct(n,e),(0,o.revalidatePath)(`/cms/products`)}function f(e){return Array.from(new Set(e.map(e=>e.trim()).filter(Boolean)))}async function p(e){let t=f(e);if(t.length===0)return{success:!1,error:`Select at least one product.`};let{error:n}=await(0,i.createClient)().from(`products`).delete().in(`id`,t);return n?{success:!1,error:n.message}:((0,o.revalidatePath)(`/cms/products`),{success:!0,count:t.length})}async function m(e){let t=f(e);if(t.length===0)return{success:!1,error:`Select at least one product.`};let{error:n}=await(0,i.createClient)().from(`products`).update({status:`draft`,updated_at:new Date().toISOString()}).in(`id`,t);return n?{success:!1,error:n.message}:((0,o.revalidatePath)(`/cms/products`),{success:!0,count:t.length})}async function h(e){let t=String(e||``).trim();if(!t)return{error:`Missing product id.`};let n=(0,i.createClient)(),{data:{user:r}}=await n.auth.getUser();if(!r)return{error:`You must be signed in to publish a product.`};let{data:a,error:s}=await n.from(`products`).update({status:`active`,updated_at:new Date().toISOString()}).eq(`id`,t).select(`slug`).single();return s||!a?{error:s?.message||`Could not publish the product.`}:((0,o.revalidatePath)(`/cms/products`),(0,o.revalidatePath)(`/cms/products/${t}/edit`),a.slug&&(0,o.revalidatePath)(`/product/${a.slug}`),{})}async function g(e){let t=(0,i.getServiceRoleSupabaseClient)(),n=e.name.trim(),r=s(e.slug?.trim()||e.name);if(!n||!r)return{success:!1,error:`Attribute name is required.`};let{error:a}=await t.from(`product_attributes`).insert({name:n,slug:r});return a?{success:!1,error:a.message}:((0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function _(e){let{error:t}=await(0,i.getServiceRoleSupabaseClient)().from(`product_attributes`).delete().eq(`id`,e);return t?{success:!1,error:t.message}:((0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function v(e){let t=(0,i.getServiceRoleSupabaseClient)(),n=e.value.trim(),r=s(e.slug?.trim()||e.value);if(!n||!r)return{success:!1,error:`Term value is required.`};let{data:a}=await t.from(`product_attribute_terms`).select(`sort_order`).eq(`attribute_id`,e.attributeId).order(`sort_order`,{ascending:!1}).limit(1),c=typeof a?.[0]?.sort_order==`number`?a[0].sort_order+1:0,{error:l}=await t.from(`product_attribute_terms`).insert({attribute_id:e.attributeId,value:n,slug:r,sort_order:c});return l?{success:!1,error:l.message}:((0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function y(e){let t=(0,i.getServiceRoleSupabaseClient)();for(let[n,r]of e.orderedTermIds.entries()){let{error:i}=await t.from(`product_attribute_terms`).update({sort_order:n,updated_at:new Date().toISOString()}).eq(`id`,r).eq(`attribute_id`,e.attributeId);if(i)return{success:!1,error:i.message}}return(0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0}}async function b(e){let t=(0,i.getServiceRoleSupabaseClient)(),{error:n}=await t.from(`product_attributes`).update({name_translations:e.nameTranslations,updated_at:new Date().toISOString()}).eq(`id`,e.attributeId);if(n)return{success:!1,error:n.message};for(let n of e.termTranslations){let{error:r}=await t.from(`product_attribute_terms`).update({value_translations:n.valueTranslations,updated_at:new Date().toISOString()}).eq(`id`,n.termId).eq(`attribute_id`,e.attributeId);if(r)return{success:!1,error:r.message}}return(0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0}}async function x(e){let{error:t}=await(0,i.getServiceRoleSupabaseClient)().from(`product_attribute_terms`).delete().eq(`id`,e);return t?{success:!1,error:t.message}:((0,o.revalidatePath)(`/cms/products/attributes`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function S(e){let t=(0,i.getServiceRoleSupabaseClient)(),n=e.name.trim(),r=s(e.slug?.trim()||e.name);if(!n||!r)return{success:!1,error:`Category name is required.`};let{data:a,error:c}=await t.from(`categories`).insert({name:n,slug:r,description:e.description?.trim()||null,name_translations:e.nameTranslations||{},description_translations:e.descriptionTranslations||{}}).select().single();return c?{success:!1,error:c.message}:((0,o.revalidatePath)(`/cms/products/categories`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0,category:a})}async function C(e,t){let n=(0,i.getServiceRoleSupabaseClient)(),r=t.name.trim(),a=s(t.slug?.trim()||t.name);if(!r||!a)return{success:!1,error:`Category name is required.`};let{error:c}=await n.from(`categories`).update({name:r,slug:a,description:t.description?.trim()||null,name_translations:t.nameTranslations||{},description_translations:t.descriptionTranslations||{}}).eq(`id`,e);return c?{success:!1,error:c.message}:((0,o.revalidatePath)(`/cms/products/categories`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function w(e){let{error:t}=await(0,i.getServiceRoleSupabaseClient)().from(`categories`).delete().eq(`id`,e);return t?{success:!1,error:t.message}:((0,o.revalidatePath)(`/cms/products/categories`),(0,o.revalidatePath)(`/cms/products/new`),(0,o.revalidatePath)(`/cms/products`),{success:!0})}async function T(e,n){let r=(0,i.getServiceRoleSupabaseClient)();try{return await t.syncCategoriesForTranslationGroup(r,e,n),(0,o.revalidatePath)(`/cms/products`),(0,o.revalidatePath)(`/cms/products/${e}/edit`),{success:!0}}catch(e){return{success:!1,error:e.message}}}exports.bulkDeleteProductsAction=p,exports.bulkDraftProductsAction=m,exports.createCategoryAction=S,exports.createProductAction=c,exports.createProductAttributeAction=g,exports.createProductAttributeTermAction=v,exports.deleteCategoryAction=w,exports.deleteProductAction=d,exports.deleteProductAttributeAction=_,exports.deleteProductAttributeTermAction=x,exports.publishProductAction=h,exports.reorderProductAttributeTermsAction=y,exports.syncProductCategoriesAction=T,exports.updateCategoryAction=C,exports.updateProductAction=u,exports.updateProductAttributeTranslationsAction=b;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../currency.cjs.js"),t=require("../../../../shipping-rate-currency.cjs.js"),n=require("../server-actions.cjs.js");let r=require("react"),i=require("lucide-react"),a=require("@nextblock-cms/utils"),o=require("react/jsx-runtime"),s=require("@nextblock-cms/ui");function c(e,t){if(typeof e!=`number`)return``;let n=(0,a.minorUnitAmountToMajor)(e,t);return(0,a.getCurrencyMinorUnitFactor)(t)===1?n.toFixed(0):n.toFixed(2)}function l(e){return e.reduce((e,t)=>(e[t.code]=(0,a.getCurrencyMinorUnitFactor)(t.code)===1?`0`:`0.00`,e),{})}function u(e,t){let n=String(e||``).trim();if(!n)return null;let r=Number(n);return!Number.isFinite(r)||r<0?null:(0,a.majorUnitAmountToMinor)(r,t)}function d(e){return e.currencies.reduce((t,n)=>(t[n.code]=c(e.amounts[n.code],n.code),t),{})}function f({zoneId:f,zoneName:p,languages:m,currencies:h=[],defaultCurrencyCode:g=`USD`,mode:_=`create`,initialData:v}){let[y,b]=(0,r.useState)(!1),x=_===`edit`,S=(0,r.useMemo)(()=>m.find(e=>e.is_default)||m[0]||null,[m]),C=(0,r.useMemo)(()=>m.filter(e=>!e.is_default),[m]),w=(0,a.normalizeCurrencyCode)(g),T=(0,r.useMemo)(()=>{let t=e.normalizeCurrencyRecord({code:w,symbol:w,exchange_rate:1,is_default:!0,is_active:!0}),n=(h.length>0?h:[t]).map(t=>e.normalizeCurrencyRecord(t)).filter(e=>e.is_active!==!1).sort((e,t)=>e.is_default===t.is_default?e.code.localeCompare(t.code):e.is_default?-1:1);return n.length>0?n:[t]},[h,w]),E=(0,r.useMemo)(()=>T.find(e=>e.is_default)||T[0],[T]),[D,O]=(0,r.useState)(v?.name||``),[k,A]=(0,r.useState)(v?.name_translations||{}),[j,M]=(0,r.useState)(v?.method_type||`flat_rate`),[N,P]=(0,r.useState)(t.normalizeShippingRateCurrencyMode(v?.currency_pricing_mode)),[F,I]=(0,r.useState)((0,a.normalizeCurrencyCode)(v?.cost_currency||E?.code||w)),[L,R]=(0,r.useState)({}),[z,B]=(0,r.useState)({}),[V,H]=(0,r.useState)(!1),U=(0,r.useMemo)(()=>{if(N===`manual`)return T.reduce((e,t)=>(e[t.code]=L[t.code]??``,e),{});let t=T.reduce((e,t)=>(e[t.code]=L[t.code]??(t.code,``),e),{}),n=u(L[F],F);if(n===null)return t;for(let r of T){if(r.code===F){t[r.code]=L[r.code]??c(n,r.code);continue}t[r.code]=c(e.convertMinorUnitAmount({amount:n,fromCurrencyCode:F,toCurrencyCode:r.code,currencies:T}),r.code)}return t},[T,L,N,F]),W=(0,r.useMemo)(()=>{if(N===`manual`)return T.reduce((e,t)=>(e[t.code]=z[t.code]??``,e),{});let t=T.reduce((e,t)=>(e[t.code]=z[t.code]??``,e),{}),n=u(z[F],F);if(n===null)return t;for(let r of T){if(r.code===F){t[r.code]=z[r.code]??c(n,r.code);continue}t[r.code]=c(e.convertMinorUnitAmount({amount:n,fromCurrencyCode:F,toCurrencyCode:r.code,currencies:T}),r.code)}return t},[T,z,N,F]);(0,r.useEffect)(()=>{E&&(T.some(e=>e.code===F)||I(E.code))},[T,E,F]),(0,r.useEffect)(()=>{if(!y||!E)return;let e=t.normalizeShippingRateCurrencyMode(v?.currency_pricing_mode),n=t.sanitizeShippingRateAmountMaps({currencies:T,mode:e,sourceCurrencyCode:v?.cost_currency||E.code,costAmounts:v?.cost_amounts||void 0,minOrderAmounts:v?.min_order_amounts||void 0,fallbackCostAmount:v?.cost_amount,fallbackMinOrderAmount:v?.min_order_amount});O(v?.name||``),A(v?.name_translations||{}),M(v?.method_type||`flat_rate`),P(e),I(n.sourceCurrencyCode),R(d({amounts:n.costAmounts,currencies:T})),B(d({amounts:n.minOrderAmounts,currencies:T}))},[T,E,v,y]);let G=e=>{e!==N&&(e===`manual`&&(R(U),B(W)),P(e))};return(0,o.jsxs)(s.Dialog,{open:y,onOpenChange:b,children:[(0,o.jsx)(s.DialogTrigger,{asChild:!0,children:x?(0,o.jsx)(s.Button,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-slate-400 hover:text-primary`,children:(0,o.jsx)(i.Edit2,{className:`h-3 w-3`})}):(0,o.jsxs)(s.Button,{variant:`outline`,size:`sm`,className:`h-8 gap-1.5 border-dashed hover:border-solid shadow-sm`,children:[(0,o.jsx)(i.Plus,{className:`h-3.5 w-3.5`}),`Add Rate`]})}),(0,o.jsx)(s.DialogContent,{className:`max-h-[85vh] max-w-4xl overflow-y-auto`,children:(0,o.jsxs)(`form`,{onSubmit:async e=>{e.preventDefault(),H(!0);let t={},r={};if(N===`manual`)for(let e of T){let n=e.code;if(j===`free_shipping`)t[n]=0;else{let e=u(L[n],n);if(e===null){H(!1),alert(`Enter a valid shipping cost for ${n}.`);return}t[n]=e}r[n]=u(z[n],n)??0}else{let e=j===`free_shipping`?0:u(L[F],F);if(e===null){H(!1),alert(`Enter a valid shipping cost for ${F}.`);return}t[F]=e,r[F]=u(z[F],F)??0}let i={name:D,nameTranslations:k,type:j,currencyPricingMode:N,sourceCurrencyCode:F,costAmounts:t,minOrderAmounts:r},a=x&&v?.id?await n.updateShippingRate(v.id,i):await n.createShippingRate(f,i);H(!1),a.success?b(!1):a.error&&alert(a.error)},children:[(0,o.jsxs)(s.DialogHeader,{children:[(0,o.jsx)(s.DialogTitle,{children:x?`Edit Shipping Rate`:`Add Shipping Rate`}),(0,o.jsxs)(s.DialogDescription,{children:[`Configure shipping costs and localized labels for matching orders in `,(0,o.jsx)(`strong`,{children:p}),`.`]})]}),(0,o.jsxs)(`div`,{className:`grid gap-5 py-6`,children:[(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsxs)(s.Label,{htmlFor:`rate-name`,children:[`Rate Name`,S?` (${S.name})`:``]}),(0,o.jsx)(s.Input,{id:`rate-name`,value:D,onChange:e=>O(e.target.value),placeholder:`e.g. Standard, Express, Free Shipping`,required:!0})]}),C.length>0&&(0,o.jsxs)(`div`,{className:`space-y-4 rounded-xl border bg-slate-50/70 p-4 dark:bg-slate-900/40`,children:[(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(i.Languages,{className:`h-4 w-4 text-slate-500`}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`p`,{className:`text-sm font-medium`,children:`Translations`}),(0,o.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Add translated shipping rate labels for the active storefront languages.`})]})]}),(0,o.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:C.map(e=>(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsx)(s.Label,{htmlFor:`rate-name-${e.code}`,children:e.name}),(0,o.jsx)(s.Input,{id:`rate-name-${e.code}`,value:k[e.code]||``,onChange:t=>A(n=>({...n,[e.code]:t.target.value})),placeholder:D||`Translated label`})]},e.code))})]}),(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsx)(s.Label,{htmlFor:`type`,children:`Method Type`}),(0,o.jsxs)(s.Select,{value:j,onValueChange:e=>{M(e),e===`free_shipping`&&R(l(T))},children:[(0,o.jsx)(s.SelectTrigger,{id:`type`,className:`bg-slate-50/50 dark:bg-slate-900/50`,children:(0,o.jsx)(s.SelectValue,{placeholder:`Select type`})}),(0,o.jsxs)(s.SelectContent,{children:[(0,o.jsx)(s.SelectItem,{value:`flat_rate`,children:(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`div`,{className:`p-1 min-w-5 h-5 rounded bg-emerald-100 dark:bg-emerald-900/30 text-emerald-600`,children:(0,o.jsx)(i.DollarSign,{className:`h-3 w-3`})}),(0,o.jsx)(`span`,{children:`Flat Rate`})]})}),(0,o.jsx)(s.SelectItem,{value:`free_shipping`,children:(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`div`,{className:`p-1 min-w-5 h-5 rounded bg-amber-100 dark:bg-amber-900/30 text-amber-600`,children:(0,o.jsx)(i.Gift,{className:`h-3 w-3`})}),(0,o.jsx)(`span`,{children:`Free Shipping`})]})})]})]})]}),(0,o.jsxs)(`div`,{className:`space-y-3 rounded-xl border bg-slate-50/70 p-4 dark:bg-slate-900/40`,children:[(0,o.jsxs)(`label`,{className:`flex items-start gap-3`,children:[(0,o.jsx)(`input`,{type:`checkbox`,checked:N===`auto`,onChange:e=>G(e.target.checked?`auto`:`manual`),className:`mt-1 h-4 w-4 rounded border-slate-300 text-primary focus:ring-primary`}),(0,o.jsxs)(`span`,{className:`space-y-1`,children:[(0,o.jsx)(`span`,{className:`block text-sm font-medium text-slate-900 dark:text-slate-100`,children:`Auto-sync all currency rates from one source amount`}),(0,o.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:`Turn this off to set exact shipping costs and free-shipping thresholds for every active currency manually.`})]})]}),N===`auto`?(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsx)(s.Label,{htmlFor:`rate-currency`,children:`Sync From Currency`}),(0,o.jsxs)(s.Select,{value:F,onValueChange:e=>{let t=(0,a.normalizeCurrencyCode)(e);R(e=>({...e,[t]:U[t]??e[t]??``})),B(e=>({...e,[t]:W[t]??e[t]??``})),I(t)},children:[(0,o.jsx)(s.SelectTrigger,{id:`rate-currency`,className:`bg-background`,children:(0,o.jsx)(s.SelectValue,{placeholder:`Select currency`})}),(0,o.jsx)(s.SelectContent,{children:T.map(e=>(0,o.jsxs)(s.SelectItem,{value:e.code,children:[e.code,e.is_default?` (Default)`:``]},e.code))})]}),(0,o.jsx)(`p`,{className:`text-[10px] text-slate-500`,children:`Enter the source amount once and the other currencies will be derived automatically using the current FX rates.`})]}):(0,o.jsx)(`p`,{className:`text-[10px] text-slate-500`,children:`Manual mode stores exact values per currency. This is the best choice when shipping should not follow exchange-rate math directly.`})]}),(0,o.jsxs)(`div`,{className:`space-y-3`,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`p`,{className:`text-sm font-medium`,children:`Currency Rates`}),(0,o.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:j===`free_shipping`?`Free-shipping methods keep cost at zero, but you can still control the threshold per currency.`:N===`auto`?`Only ${F} is editable. The rest are derived automatically.`:`Set the exact shopper-facing shipping price for each active currency.`})]}),(0,o.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-3`,children:T.map(e=>{let t=N===`auto`&&e.code!==F,n=(0,a.getCurrencyMinorUnitFactor)(e.code)===1?`1`:`0.01`;return(0,o.jsxs)(`div`,{className:`space-y-4 rounded-xl border bg-card/70 p-4 shadow-sm`,children:[(0,o.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`p`,{className:`font-medium`,children:e.code}),(0,o.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Rate `,e.exchange_rate]})]}),(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[e.is_default?(0,o.jsx)(s.Badge,{variant:`outline`,children:`Default`}):null,N===`auto`&&e.code===F?(0,o.jsx)(s.Badge,{children:`Source`}):null,t?(0,o.jsx)(s.Badge,{variant:`outline`,children:`Derived`}):null]})]}),(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsxs)(s.Label,{htmlFor:`rate-cost-${e.code}`,children:[`Cost (`,e.code,`)`]}),(0,o.jsxs)(`div`,{className:`relative`,children:[(0,o.jsx)(i.DollarSign,{className:`absolute left-2.5 top-2.5 h-4 w-4 text-slate-400`}),(0,o.jsx)(s.Input,{id:`rate-cost-${e.code}`,type:`number`,step:n,min:`0`,value:U[e.code]??``,onChange:t=>R(n=>({...n,[e.code]:t.target.value})),className:`pl-9 bg-slate-50/50 dark:bg-slate-900/50 disabled:opacity-70`,disabled:j===`free_shipping`||t,required:j!==`free_shipping`&&N===`manual`})]})]}),(0,o.jsxs)(`div`,{className:`space-y-2`,children:[(0,o.jsxs)(s.Label,{htmlFor:`rate-threshold-${e.code}`,children:[`Free-Shipping Threshold (`,e.code,`)`]}),(0,o.jsxs)(`div`,{className:`relative`,children:[(0,o.jsx)(i.DollarSign,{className:`absolute left-2.5 top-2.5 h-4 w-4 text-slate-400`}),(0,o.jsx)(s.Input,{id:`rate-threshold-${e.code}`,type:`number`,step:n,min:`0`,value:W[e.code]??``,onChange:t=>B(n=>({...n,[e.code]:t.target.value})),className:`pl-9 bg-slate-50/50 dark:bg-slate-900/50 disabled:opacity-70`,disabled:t,placeholder:(0,a.getCurrencyMinorUnitFactor)(e.code)===1?`0`:`0.00`})]})]}),t?(0,o.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`This currency is synced automatically from `,F,`.`]}):N===`manual`?(0,o.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Enter the exact amount shoppers should see in this currency.`}):null]},e.code)})})]})]}),(0,o.jsxs)(s.DialogFooter,{className:`bg-slate-50 dark:bg-slate-900/50 -mx-6 -mb-6 p-4 border-t dark:border-slate-800`,children:[(0,o.jsx)(s.Button,{type:`button`,variant:`ghost`,onClick:()=>b(!1),disabled:V,children:`Cancel`}),(0,o.jsx)(s.Button,{type:`submit`,disabled:V||!D.trim(),children:V?x?`Saving...`:`Adding...`:x?`Save Changes`:`Add Rate`})]})]})})]})}exports.RateForm=f;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../../../countries.cjs.js"),n=require("../../../../states.cjs.js"),r=require("../server-actions.cjs.js");let i=require("react");i=e.__toESM(i,1);let a=require("lucide-react"),o=require("react/jsx-runtime"),s=require("@nextblock-cms/ui");function c(e=[]){return[...new Set(e.map(e=>e.country_code))]}function l(e=[]){return e.reduce((e,t)=>{if(!t.state_code)return e;let n=new Set(e[t.country_code]||[]);return n.add(t.state_code),e[t.country_code]=[...n],e},{})}function u(e,t){return e.flatMap(e=>{let n=t[e]||[];return n.length===0?[{country_code:e,state_code:null}]:n.map(t=>({country_code:e,state_code:t}))})}function d({mode:e=`create`,initialData:d}){let[f,p]=(0,i.useState)(!1),m=e===`edit`,[h,g]=(0,i.useState)(d?.name||``),[_,v]=(0,i.useState)(d?.priority_order||0),[y,b]=(0,i.useState)(c(d?.locations)),[x,S]=(0,i.useState)(l(d?.locations)),[C,w]=(0,i.useState)(``),[T,E]=(0,i.useState)(!1);(0,i.useEffect)(()=>{f&&(g(d?.name||``),v(d?.priority_order||0),b(c(d?.locations)),S(l(d?.locations)),w(``))},[d,f]);let D=(0,i.useMemo)(()=>{let e=C.trim().toLowerCase();return e?t.countries.filter(t=>t.name.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)):t.countries},[C]),O=(0,i.useMemo)(()=>t.countries.filter(e=>y.includes(e.code)),[y]),k=e=>{b(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),S(t=>{if(t[e]){let n={...t};return delete n[e],n}return t})},A=(e,t)=>{S(n=>{let r=new Set(n[e]||[]);return r.has(t)?r.delete(t):r.add(t),{...n,[e]:[...r]}})};return(0,o.jsxs)(s.Dialog,{open:f,onOpenChange:p,children:[(0,o.jsx)(s.DialogTrigger,{asChild:!0,children:m?(0,o.jsx)(s.Button,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-slate-400 hover:text-primary`,children:(0,o.jsx)(a.Edit2,{className:`h-4 w-4`})}):(0,o.jsxs)(s.Button,{className:`gap-2 shadow-sm`,children:[(0,o.jsx)(a.Plus,{className:`h-4 w-4`}),`New Zone`]})}),(0,o.jsx)(s.DialogContent,{className:`max-w-4xl max-h-[90vh] flex flex-col overflow-hidden`,children:(0,o.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),!h||y.length===0)return;E(!0);let t=u(y,x),n=m&&d?.id?await r.updateShippingZone(d.id,h,_,t):await r.createShippingZone(h,_,t);E(!1),n.success?(p(!1),m||(g(``),v(0),b([]),S({}),w(``))):n.error&&alert(n.error)},className:`flex h-full flex-col overflow-hidden`,children:[(0,o.jsxs)(s.DialogHeader,{children:[(0,o.jsx)(s.DialogTitle,{children:m?`Edit Shipping Zone`:`Create Shipping Zone`}),(0,o.jsx)(s.DialogDescription,{children:`Select countries first, then optionally limit a zone to specific states or provinces. Leaving state selections empty keeps the whole country in the zone.`})]}),(0,o.jsxs)(`div`,{className:`grid gap-6 overflow-y-auto py-6 pr-2`,children:[(0,o.jsxs)(`div`,{className:`grid grid-cols-4 items-center gap-4`,children:[(0,o.jsx)(s.Label,{htmlFor:`name`,className:`text-right`,children:`Zone Name`}),(0,o.jsx)(s.Input,{id:`name`,value:h,onChange:e=>g(e.target.value),placeholder:`e.g. North America, Canada East, US West`,className:`col-span-3`,required:!0})]}),(0,o.jsxs)(`div`,{className:`grid grid-cols-4 items-center gap-4`,children:[(0,o.jsx)(s.Label,{htmlFor:`priority`,className:`text-right`,children:`Priority Order`}),(0,o.jsx)(s.Input,{id:`priority`,type:`number`,value:_,onChange:e=>v(Number(e.target.value)),className:`col-span-3`})]}),(0,o.jsxs)(`div`,{className:`grid gap-6 lg:grid-cols-[1.2fr_1fr]`,children:[(0,o.jsxs)(`div`,{className:`space-y-4`,children:[(0,o.jsxs)(`div`,{className:`flex items-end justify-between gap-3`,children:[(0,o.jsxs)(s.Label,{className:`text-sm font-semibold`,children:[`Countries (`,y.length,`)`]}),(0,o.jsxs)(`div`,{className:`relative w-full max-w-xs`,children:[(0,o.jsx)(a.Search,{className:`absolute left-2.5 top-2.5 h-4 w-4 text-slate-400`}),(0,o.jsx)(s.Input,{placeholder:`Search countries...`,className:`pl-9 h-9`,value:C,onChange:e=>w(e.target.value)})]})]}),(0,o.jsx)(s.Card,{className:`border-slate-200 bg-slate-50/30 p-4 dark:border-slate-800 dark:bg-slate-900/30`,children:(0,o.jsx)(`div`,{className:`grid max-h-[360px] grid-cols-1 gap-3 overflow-y-auto pr-1 sm:grid-cols-2`,children:D.map(e=>{let t=y.includes(e.code);return(0,o.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md border p-2 transition-colors ${t?`border-primary/30 bg-primary/5 text-primary`:`border-transparent hover:bg-slate-100 dark:hover:bg-slate-800/60`}`,children:[(0,o.jsx)(s.Checkbox,{id:`country-${e.code}`,checked:t,onCheckedChange:()=>k(e.code)}),(0,o.jsxs)(`label`,{htmlFor:`country-${e.code}`,className:`flex-1 cursor-pointer text-xs py-1`,children:[e.name,` (`,e.code,`)`]})]},e.code)})})})]}),(0,o.jsxs)(`div`,{className:`space-y-4`,children:[(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(a.MapPin,{className:`h-4 w-4 text-slate-500`}),(0,o.jsx)(s.Label,{className:`text-sm font-semibold`,children:`States / Provinces`})]}),O.length===0?(0,o.jsx)(s.Card,{className:`border-dashed p-4 text-sm text-muted-foreground`,children:`Select one or more countries to optionally narrow the zone to specific states or provinces.`}):(0,o.jsx)(`div`,{className:`space-y-4`,children:O.map(e=>{let t=n.getStatesForCountry(e.code),r=x[e.code]||[];return(0,o.jsx)(s.Card,{className:`p-4`,children:(0,o.jsxs)(`div`,{className:`space-y-3`,children:[(0,o.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsxs)(`p`,{className:`font-medium`,children:[e.name,` (`,e.code,`)`]}),(0,o.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t.length>0?`Leave all unchecked to apply this zone to the whole country.`:`This country uses a country-level zone in the current UI.`})]}),(0,o.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r.length>0?`${r.length} selected`:`Whole country`})]}),t.length>0?(0,o.jsx)(`div`,{className:`grid max-h-[220px] grid-cols-1 gap-2 overflow-y-auto pr-1 sm:grid-cols-2`,children:t.map(t=>{let n=r.includes(t.code);return(0,o.jsxs)(`div`,{className:`flex items-center space-x-2 rounded-md border p-2 transition-colors ${n?`border-primary/30 bg-primary/5 text-primary`:`border-transparent hover:bg-slate-50 dark:hover:bg-slate-800/60`}`,children:[(0,o.jsx)(s.Checkbox,{id:`${e.code}-${t.code}`,checked:n,onCheckedChange:()=>A(e.code,t.code)}),(0,o.jsxs)(`label`,{htmlFor:`${e.code}-${t.code}`,className:`flex-1 cursor-pointer text-xs py-1`,children:[t.name,` (`,t.code,`)`]})]},`${e.code}-${t.code}`)})}):null]})},e.code)})})]})]})]}),(0,o.jsxs)(s.DialogFooter,{className:`mt-auto border-t pt-4`,children:[(0,o.jsx)(s.Button,{type:`button`,variant:`ghost`,onClick:()=>p(!1),children:`Cancel`}),(0,o.jsx)(s.Button,{type:`submit`,disabled:T||!h||y.length===0,children:T?m?`Updating...`:`Creating...`:m?`Save Changes`:`Create Zone`})]})]})})]})}exports.ZoneForm=d;
@@ -1 +0,0 @@
1
- const e=require("./server-actions.cjs.js"),t=require("./ShippingPage.cjs.js");exports.ShippingPage=t.ShippingPage,exports.createShippingRate=e.createShippingRate,exports.createShippingZone=e.createShippingZone,exports.deleteShippingRate=e.deleteShippingRate,exports.deleteShippingZone=e.deleteShippingZone,exports.updateInventoryTrackingAction=e.updateInventoryTrackingAction,exports.updateShippingRate=e.updateShippingRate,exports.updateShippingZone=e.updateShippingZone;
@@ -1 +0,0 @@
1
- "use server";const e=require("../../../currency.cjs.js"),t=require("../../../countries.cjs.js"),n=require("../../../shipping-rate-currency.cjs.js"),r=require("../../../states.cjs.js"),i=require("../../../inventory-settings.cjs.js");let a=require("@nextblock-cms/db/server"),o=require("next/navigation"),s=require("next/cache");function c(e){return Object.entries(e||{}).reduce((e,[t,n])=>{let r=t.trim().toLowerCase(),i=n.trim();return r&&i&&(e[r]=i),e},{})}async function l(e){let t=(0,a.createClient)(),{data:{user:n}}=await t.auth.getUser();if(!n)throw Error(`Unauthorized`);let{data:r}=await t.from(`profiles`).select(`role`).eq(`id`,n.id).single();if(!r||r.role!==`ADMIN`)throw Error(`Forbidden`);let c=e.getAll(`trackQuantities`).includes(`true`),l=await i.getEcommerceInventorySettings(t),{error:u}=await i.upsertEcommerceInventorySettings(t,{trackQuantities:c,enableTaxes:l.enableTaxes,taxCalculationMode:l.taxCalculationMode});if(u)throw Error(u.message);(0,s.revalidatePath)(`/cms/shipping`),(0,o.redirect)(`/cms/shipping?success=Inventory settings updated`)}function u(e){let n=new Map;for(let i of e){let e=t.normalizeCountryCode(i.country_code);if(!e)continue;let a=r.normalizeSubdivisionCode(e,i.state_code)||null,o=`${e}:${a??`*`}`;n.set(o,{country_code:e,state_code:a})}return[...n.values()]}async function d(e){let{data:t,error:n}=await e.from(`currencies`).select(`code, is_default`).eq(`is_active`,!0).order(`is_default`,{ascending:!1}).order(`code`,{ascending:!0});return n?{error:n.message}:{currencies:t||[]}}async function f(e,t,n){let r=(0,a.getServiceRoleSupabaseClient)(),i=u(n),{data:o,error:c}=await r.from(`shipping_zones`).insert({name:e,priority_order:t}).select().single();if(c||!o)return{error:c?.message||`Failed to create zone`};if(i.length>0){let e=i.map(e=>({zone_id:o.id,country_code:e.country_code,state_code:e.state_code??null})),{error:t}=await r.from(`shipping_zone_locations`).insert(e);if(t)return{error:t.message}}return(0,s.revalidatePath)(`/cms/shipping`),{success:!0}}async function p(e,t,n,r){let i=(0,a.getServiceRoleSupabaseClient)(),o=u(r),{error:c}=await i.from(`shipping_zones`).update({name:t,priority_order:n,updated_at:new Date().toISOString()}).eq(`id`,e);if(c)return{error:c.message||`Failed to update zone`};let{error:l}=await i.from(`shipping_zone_locations`).delete().eq(`zone_id`,e);if(l)return{error:`Failed to refresh locations`};if(o.length>0){let t=o.map(t=>({zone_id:e,country_code:t.country_code,state_code:t.state_code??null})),{error:n}=await i.from(`shipping_zone_locations`).insert(t);if(n)return{error:n.message}}return(0,s.revalidatePath)(`/cms/shipping`),{success:!0}}async function m(e){let{error:t}=await(0,a.getServiceRoleSupabaseClient)().from(`shipping_zones`).delete().eq(`id`,e);return t?{error:t.message}:((0,s.revalidatePath)(`/cms/shipping`),{success:!0})}async function h(t,r){let i=(0,a.getServiceRoleSupabaseClient)(),o=await d(i);if(`error`in o)return{error:o.error};let l=n.sanitizeShippingRateAmountMaps({currencies:o.currencies.map(t=>e.normalizeCurrencyRecord(t)),mode:r.currencyPricingMode,sourceCurrencyCode:r.sourceCurrencyCode,costAmounts:r.costAmounts,minOrderAmounts:r.minOrderAmounts,fallbackCostAmount:r.cost,fallbackMinOrderAmount:r.minOrderAmount}),{error:u}=await i.from(`shipping_zone_methods`).insert({zone_id:t,name:r.name.trim(),name_translations:c(r.nameTranslations),method_type:r.type,currency_pricing_mode:l.mode,cost_amount:l.costAmounts[l.sourceCurrencyCode],cost_amounts:l.costAmounts,cost_currency:l.sourceCurrencyCode,min_order_amount:l.minOrderAmounts[l.sourceCurrencyCode],min_order_amounts:l.minOrderAmounts});return u?{error:u.message}:((0,s.revalidatePath)(`/cms/shipping`),{success:!0})}async function g(t,r){let i=(0,a.getServiceRoleSupabaseClient)(),o=await d(i);if(`error`in o)return{error:o.error};let l=n.sanitizeShippingRateAmountMaps({currencies:o.currencies.map(t=>e.normalizeCurrencyRecord(t)),mode:r.currencyPricingMode,sourceCurrencyCode:r.sourceCurrencyCode,costAmounts:r.costAmounts,minOrderAmounts:r.minOrderAmounts,fallbackCostAmount:r.cost,fallbackMinOrderAmount:r.minOrderAmount}),{error:u}=await i.from(`shipping_zone_methods`).update({name:r.name.trim(),name_translations:c(r.nameTranslations),method_type:r.type,currency_pricing_mode:l.mode,cost_amount:l.costAmounts[l.sourceCurrencyCode],cost_amounts:l.costAmounts,cost_currency:l.sourceCurrencyCode,min_order_amount:l.minOrderAmounts[l.sourceCurrencyCode],min_order_amounts:l.minOrderAmounts,updated_at:new Date().toISOString()}).eq(`id`,t);return u?{error:u.message}:((0,s.revalidatePath)(`/cms/shipping`),{success:!0})}async function _(e){let{error:t}=await(0,a.getServiceRoleSupabaseClient)().from(`shipping_zone_methods`).delete().eq(`id`,e);return t?{error:t.message}:((0,s.revalidatePath)(`/cms/shipping`),{success:!0})}exports.createShippingRate=h,exports.createShippingZone=f,exports.deleteShippingRate=_,exports.deleteShippingZone=m,exports.updateInventoryTrackingAction=l,exports.updateShippingRate=g,exports.updateShippingZone=p;
@@ -1 +0,0 @@
1
- const e=require("../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../../states.cjs.js"),n=require("../../../inventory-settings.cjs.js"),r=require("../payments/queries.cjs.js"),i=require("./actions.cjs.js"),a=require("./components/TaxRateForm.cjs.js");let o=require("next/link");o=e.__toESM(o,1);let s=require("lucide-react"),c=require("react/jsx-runtime"),l=require("@nextblock-cms/db/server"),u=require("@nextblock-cms/ui");function d(e){return`${e.toFixed(4).replace(/\.?0+$/,``)}%`}function f(e){return e.state_code?`${e.country_code} - ${t.resolveSubdivisionName(e.country_code,e.state_code)}`:`${e.country_code} - Country-wide`}async function p({searchParams:e}){let t=(0,l.createClient)(),p=(0,l.getServiceRoleSupabaseClient)(),[m,h,g]=await Promise.all([n.getEcommerceInventorySettings(t),r.getEnabledPaymentProviders(),p.from(`tax_rates`).select(`id, country_code, state_code, tax_name, tax_rate, created_at, updated_at`).order(`country_code`).order(`state_code`).order(`tax_name`)]),_=g.data||[],v=g.error,y=h.stripe;return(0,c.jsxs)(`div`,{className:`mx-auto w-full max-w-6xl space-y-6 px-6 py-8`,children:[e?.success?(0,c.jsx)(`div`,{className:`rounded-lg border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-700`,children:e.success}):null,(0,c.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,c.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,c.jsx)(u.Button,{asChild:!0,variant:`outline`,size:`icon`,"aria-label":`Back to shipping`,children:(0,c.jsx)(o.default,{href:`/cms/shipping`,children:(0,c.jsx)(s.ArrowLeft,{className:`h-4 w-4`})})}),(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Tax Settings`}),(0,c.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Configure Stripe tax behavior globally and maintain manual country or state/province tax rates for physical goods.`})]})]}),(0,c.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,c.jsxs)(u.Badge,{variant:y?`default`:`outline`,className:`uppercase`,children:[`Stripe `,y?`Enabled`:`Disabled`]}),(0,c.jsx)(`div`,{className:`rounded-full border bg-muted/30 p-3 text-muted-foreground`,children:(0,c.jsx)(s.Settings2,{className:`h-5 w-5`})})]})]}),y?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(u.Card,{children:[(0,c.jsxs)(u.CardHeader,{children:[(0,c.jsx)(u.CardTitle,{children:`Global Tax Controls`}),(0,c.jsx)(u.CardDescription,{children:`Manual mode uses the tax rates below. Automatic mode uses Stripe Tax during Stripe Checkout instead of a free third-party tax API.`})]}),(0,c.jsx)(u.CardContent,{children:(0,c.jsxs)(`form`,{action:i.updateTaxSettingsAction,className:`space-y-6`,children:[(0,c.jsxs)(`div`,{className:`rounded-lg border bg-muted/20 p-4`,children:[(0,c.jsx)(`input`,{type:`hidden`,name:`enableTaxes`,value:`false`}),(0,c.jsxs)(`label`,{htmlFor:`enable-taxes`,className:`flex cursor-pointer items-start gap-3`,children:[(0,c.jsx)(`input`,{id:`enable-taxes`,name:`enableTaxes`,type:`checkbox`,value:`true`,defaultChecked:m.enableTaxes,className:`mt-1 h-4 w-4 rounded border-slate-300 text-primary focus:ring-primary`}),(0,c.jsxs)(`span`,{className:`space-y-1`,children:[(0,c.jsx)(`span`,{className:`block font-medium`,children:`Enable taxes`}),(0,c.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:`When disabled, tax totals resolve to zero even if product or jurisdiction records exist.`})]})]})]}),(0,c.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-[minmax(0,1fr)_auto] md:items-end`,children:[(0,c.jsxs)(`div`,{className:`space-y-2`,children:[(0,c.jsx)(`label`,{htmlFor:`tax-calculation-mode`,className:`text-sm font-medium text-foreground`,children:`Tax calculation mode`}),(0,c.jsxs)(`select`,{id:`tax-calculation-mode`,name:`taxCalculationMode`,defaultValue:m.taxCalculationMode,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm`,children:[(0,c.jsx)(`option`,{value:`manual`,children:`Manual tax rates`}),(0,c.jsx)(`option`,{value:`automatic`,children:`Automatic via Stripe Tax`})]}),(0,c.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Automatic mode depends on your Stripe Tax setup. Manual rates stay saved and can be used again if you switch back later.`})]}),(0,c.jsx)(`div`,{className:`flex justify-end`,children:(0,c.jsx)(u.Button,{type:`submit`,children:`Save Tax Settings`})})]})]})})]}),(0,c.jsxs)(u.Card,{children:[(0,c.jsx)(u.CardHeader,{children:(0,c.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,c.jsxs)(`div`,{children:[(0,c.jsx)(u.CardTitle,{children:`Manual Tax Rates`}),(0,c.jsx)(u.CardDescription,{children:`Add combined taxes as separate rows. For example, create both GST and PST for the same province if they should stack.`})]}),(0,c.jsx)(u.Badge,{variant:m.taxCalculationMode===`manual`?`default`:`outline`,children:m.taxCalculationMode===`manual`?`Active Mode`:`Stored for Manual Mode`})]})}),(0,c.jsxs)(u.CardContent,{className:`space-y-6`,children:[v?(0,c.jsx)(`div`,{className:`rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800`,children:`Tax rates couldn't be loaded yet. This usually means the new tax migration hasn't been applied to the current database.`}):null,v?null:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`div`,{className:`rounded-xl border bg-card p-4`,children:[(0,c.jsxs)(`div`,{className:`mb-4 flex items-center gap-2`,children:[(0,c.jsx)(s.ShieldCheck,{className:`h-4 w-4 text-primary`}),(0,c.jsx)(`h2`,{className:`font-semibold`,children:`Create a Tax Rate`})]}),(0,c.jsx)(a.TaxRateForm,{})]}),(0,c.jsx)(`div`,{className:`space-y-4`,children:_.length===0?(0,c.jsxs)(`div`,{className:`rounded-xl border border-dashed bg-muted/10 px-4 py-8 text-center`,children:[(0,c.jsx)(`p`,{className:`font-medium`,children:`No manual tax rates yet`}),(0,c.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Add country-wide or state/province-specific rows to start calculating manual taxes.`})]}):_.map(e=>(0,c.jsxs)(u.Card,{className:`border-muted`,children:[(0,c.jsx)(u.CardHeader,{className:`pb-4`,children:(0,c.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,c.jsxs)(`div`,{className:`space-y-1`,children:[(0,c.jsx)(u.CardTitle,{className:`text-base`,children:e.tax_name}),(0,c.jsx)(u.CardDescription,{children:f(e)})]}),(0,c.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,c.jsx)(u.Badge,{variant:`outline`,children:d(Number(e.tax_rate))}),(0,c.jsx)(`form`,{action:async()=>{"use server";await i.deleteTaxRateAction(e.id)},children:(0,c.jsx)(u.Button,{type:`submit`,variant:`ghost`,size:`icon`,"aria-label":`Delete tax rate`,children:(0,c.jsx)(s.Trash2,{className:`h-4 w-4`})})})]})]})}),(0,c.jsx)(u.CardContent,{children:(0,c.jsx)(a.TaxRateForm,{initialData:e,submitLabel:`Update tax rate`,compact:!0})})]},e.id))})]})]})]})]}):(0,c.jsxs)(u.Card,{className:`border-dashed`,children:[(0,c.jsxs)(u.CardHeader,{children:[(0,c.jsx)(u.CardTitle,{children:`Enable Stripe to configure physical-product taxes`}),(0,c.jsx)(u.CardDescription,{children:`Stripe tax settings apply whenever Stripe is enabled for physical products. Freemius still handles taxes on its own digital checkout flow.`})]}),(0,c.jsx)(u.CardContent,{children:(0,c.jsx)(u.Button,{asChild:!0,variant:`outline`,children:(0,c.jsx)(o.default,{href:`/cms/payments`,children:`Open Payment Settings`})})})]})]})}exports.TaxesPage=p;
@@ -1 +0,0 @@
1
- "use server";const e=require("../../../countries.cjs.js"),t=require("../../../states.cjs.js"),n=require("../../../inventory-settings.cjs.js");let r=require("@nextblock-cms/db/server"),i=require("next/navigation"),a=require("next/cache");async function o(){let e=(0,r.createClient)(),{data:{user:t}}=await e.auth.getUser();if(!t)throw Error(`Unauthorized`);let{data:n}=await e.from(`profiles`).select(`role`).eq(`id`,t.id).single();if(!n||n.role!==`ADMIN`)throw Error(`Forbidden`);return e}async function s(e){let t=await o(),r=await n.getEcommerceInventorySettings(t),s=e.getAll(`enableTaxes`).includes(`true`),c=e.get(`taxCalculationMode`)===`automatic`?`automatic`:`manual`,{error:l}=await n.upsertEcommerceInventorySettings(t,{trackQuantities:r.trackQuantities,enableTaxes:s,taxCalculationMode:c});if(l)throw Error(l.message);(0,a.revalidatePath)(`/cms/shipping`),(0,a.revalidatePath)(`/cms/settings/taxes`),(0,i.redirect)(`/cms/settings/taxes?success=Tax settings updated`)}async function c(n){let r=await o(),i=String(n.get(`id`)||``).trim(),s=e.normalizeCountryCode(String(n.get(`country_code`)||``).trim()),c=String(n.get(`state_code`)||``).trim(),l=String(n.get(`tax_name`)||``).trim(),u=Number(n.get(`tax_rate`));if(!s)throw Error(`Country code is required.`);if(!l)throw Error(`Tax name is required.`);if(!Number.isFinite(u)||u<0||u>100)throw Error(`Tax rate must be between 0 and 100.`);let d={country_code:s,state_code:t.normalizeSubdivisionCode(s,c)||null,tax_name:l,tax_rate:u},{error:f}=await(i?r.from(`tax_rates`).update(d).eq(`id`,i):r.from(`tax_rates`).insert(d));if(f)throw Error(f.message);(0,a.revalidatePath)(`/cms/settings/taxes`)}async function l(e){let{error:t}=await(await o()).from(`tax_rates`).delete().eq(`id`,e);if(t)throw Error(t.message);(0,a.revalidatePath)(`/cms/settings/taxes`)}exports.deleteTaxRateAction=l,exports.saveTaxRateAction=c,exports.updateTaxSettingsAction=s;
@@ -1 +0,0 @@
1
- "use client";const e=require("../../../../countries.cjs.js"),t=require("../../../../states.cjs.js"),n=require("../actions.cjs.js");let r=require("react"),i=require("react/jsx-runtime"),a=require("@nextblock-cms/ui");function o({initialData:o,submitLabel:s=`Save tax rate`,compact:c=!1}){let l=e.normalizeCountryCode(o?.country_code)||`US`,[u,d]=(0,r.useState)(l),[f,p]=(0,r.useState)(t.normalizeSubdivisionCode(l,o?.state_code)||o?.state_code||``),m=(0,r.useMemo)(()=>t.getStatesForCountry(u),[u]),h=t.countryUsesStructuredStates(u);return(0,i.jsxs)(`form`,{action:n.saveTaxRateAction,className:`space-y-4`,children:[o?.id?(0,i.jsx)(`input`,{type:`hidden`,name:`id`,value:o.id}):null,(0,i.jsxs)(`div`,{className:c?`grid gap-4 md:grid-cols-4`:`grid gap-4 md:grid-cols-2 xl:grid-cols-4`,children:[(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(a.Label,{htmlFor:o?.id?`country-${o.id}`:`tax-rate-country`,children:`Country`}),(0,i.jsx)(`select`,{id:o?.id?`country-${o.id}`:`tax-rate-country`,name:`country_code`,value:u,onChange:e=>{let n=e.target.value,r=t.getStatesForCountry(n);d(n),p(r.some(e=>e.code===f)?f:``)},className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm`,children:e.countries.map(e=>(0,i.jsx)(`option`,{value:e.code,children:e.name},e.code))})]}),(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(a.Label,{htmlFor:o?.id?`state-${o.id}`:`tax-rate-state`,children:`State / Province`}),h?(0,i.jsxs)(`select`,{id:o?.id?`state-${o.id}`:`tax-rate-state`,name:`state_code`,value:f,onChange:e=>p(e.target.value),className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm`,children:[(0,i.jsx)(`option`,{value:``,children:`Country-wide / federal`}),m.map(e=>(0,i.jsx)(`option`,{value:e.code,children:e.name},e.code))]}):(0,i.jsx)(a.Input,{id:o?.id?`state-${o.id}`:`tax-rate-state`,name:`state_code`,value:f,onChange:e=>p(e.target.value),placeholder:`Optional`})]}),(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(a.Label,{htmlFor:o?.id?`name-${o.id}`:`tax-rate-name`,children:`Tax name`}),(0,i.jsx)(a.Input,{id:o?.id?`name-${o.id}`:`tax-rate-name`,name:`tax_name`,defaultValue:o?.tax_name||``,placeholder:`GST, PST, State Sales Tax`,required:!0})]}),(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(a.Label,{htmlFor:o?.id?`rate-${o.id}`:`tax-rate-rate`,children:`Rate (%)`}),(0,i.jsx)(a.Input,{id:o?.id?`rate-${o.id}`:`tax-rate-rate`,name:`tax_rate`,type:`number`,min:`0`,max:`100`,step:`0.0001`,defaultValue:typeof o?.tax_rate==`number`?o.tax_rate.toString():``,placeholder:`5.0000`,required:!0})]})]}),(0,i.jsx)(`div`,{className:`flex justify-end`,children:(0,i.jsx)(a.Button,{type:`submit`,size:c?`sm`:`default`,children:s})})]})}exports.TaxRateForm=o;
@@ -1 +0,0 @@
1
- const e=require("./actions.cjs.js"),t=require("./TaxesPage.cjs.js");exports.TaxesPage=t.TaxesPage,exports.deleteTaxRateAction=e.deleteTaxRateAction,exports.saveTaxRateAction=e.saveTaxRateAction,exports.updateTaxSettingsAction=e.updateTaxSettingsAction;
@@ -1 +0,0 @@
1
- "use client";const e=require("../_virtual/_rolldown/runtime.cjs.js");let t=require("react");t=e.__toESM(t,1);let n=require("react/jsx-runtime");var r=(0,t.createContext)(void 0),i=({product:e,children:t})=>(0,n.jsx)(r.Provider,{value:{product:e},children:t}),a=()=>{let e=(0,t.useContext)(r);if(!e)throw Error(`useProduct must be used within a ProductProvider. Ensure the component is wrapped in a ProductProvider.`);return e.product};exports.ProductProvider=i,exports.useProduct=a;
@@ -1 +0,0 @@
1
- require("./zod-config.cjs.js");let e=require("zod");var t=e.z.enum([`physical`,`digital`]).or(e.z.literal(``)).refine(e=>e!==``,{message:`Product type is required`}).transform(e=>e),n=e.z.record(e.z.string().regex(/^[A-Z]{3}$/,`Currency code must be ISO 4217`),e.z.coerce.number().min(0,`Prices must be non-negative`)),r=e.z.record(e.z.string().regex(/^[A-Z]{3}$/,`Currency code must be ISO 4217`),e.z.coerce.number().min(0,`Sale prices must be non-negative`).nullable()),i=e.z.string().trim().refine(e=>e===``||!Number.isNaN(Date.parse(e)),{message:`Must be a valid date and time`}).transform(e=>e===``?null:e).nullable().optional();function a(e,t){if(!e||!t)return!0;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)||Number.isNaN(r)?!0:n<r}var o=e.z.object({attribute_id:e.z.string().uuid(),attribute_name:e.z.string(),term_id:e.z.string().uuid(),term_value:e.z.string(),term_slug:e.z.string().optional()}),s=e.z.object({id:e.z.string().uuid().optional(),combination_key:e.z.string().min(1),sku:e.z.string().min(1,`Variant SKU is required`),upc:e.z.string().optional().nullable(),price:e.z.coerce.number().min(0,`Variant price must be non-negative`),prices:n.default({}),sale_price:e.z.coerce.number().min(0,`Variant sale price must be non-negative`).optional().nullable(),sale_prices:r.default({}),sale_start_at:i,sale_end_at:i,stock_quantity:e.z.coerce.number().int().min(0,`Variant stock must be a non-negative integer`),main_media_id:e.z.string().uuid().optional().nullable(),main_image_url:e.z.string().optional().nullable(),attribute_term_ids:e.z.array(e.z.string().uuid()).min(1),selected_options:e.z.array(o).min(1),label:e.z.string().min(1)}).refine(e=>e.sale_price===null||e.sale_price===void 0||e.sale_price<=e.price,{message:`Variant sale price cannot exceed the regular price`,path:[`sale_price`]}).refine(e=>Object.entries(e.sale_prices||{}).every(([t,n])=>{if(n==null)return!0;let r=e.prices?.[t];return typeof r!=`number`||n<=r}),{message:`Variant sale prices cannot exceed regular prices`,path:[`sale_prices`]}).refine(e=>a(e.sale_start_at,e.sale_end_at),{message:`Sale end must be after the sale start`,path:[`sale_end_at`]}),c=e.z.object({attribute_id:e.z.string().uuid(),term_ids:e.z.array(e.z.string().uuid())}),l=e.z.object({product_type:t,payment_provider:e.z.enum([`stripe`,`freemius`]),title:e.z.string().min(1,`Title is required`),slug:e.z.string().min(1,`Slug is required`).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,`Slug must be lowercase alphanumeric with hyphens`),sku:e.z.string().min(1,`SKU is required`),upc:e.z.string().optional().nullable(),price:e.z.coerce.number().min(0,`Price must be non-negative`),prices:n.default({}),sale_price:e.z.coerce.number().min(0,`Sale price must be non-negative`).optional().nullable(),sale_prices:r.default({}),sale_start_at:i,sale_end_at:i,stock:e.z.coerce.number().int().min(0,`Stock must be a non-negative integer`),meta_title:e.z.string().optional().nullable(),meta_description:e.z.string().optional().nullable(),custom_canonical:e.z.string().optional().nullable(),short_description:e.z.string().optional(),description_json:e.z.any().optional(),freemius_plan_id:e.z.string().optional(),freemius_product_id:e.z.string().optional(),trial_period_days:e.z.coerce.number().int().min(0,`Trial period must be zero or greater`).default(0),trial_requires_payment_method:e.z.boolean().default(!1),media_id:e.z.string().optional(),product_media:e.z.array(e.z.object({media_id:e.z.string()})).optional(),category_ids:e.z.array(e.z.string().uuid()).optional(),is_taxable:e.z.boolean(),status:e.z.enum([`draft`,`active`,`archived`]),language_id:e.z.coerce.number().int().min(1,`Language is required`),translation_group_id:e.z.string().uuid().optional().or(e.z.literal(``)).transform(e=>e===``?void 0:e),explicitly_removed_media_ids:e.z.array(e.z.string()).optional(),variation_attributes:e.z.array(c).optional(),variants:e.z.array(s).optional()}).refine(e=>e.sale_price===null||e.sale_price===void 0||e.sale_price<=e.price,{message:`Sale price cannot exceed the regular price`,path:[`sale_price`]}).refine(e=>Object.entries(e.sale_prices||{}).every(([t,n])=>{if(n==null)return!0;let r=e.prices?.[t];return typeof r!=`number`||n<=r}),{message:`Sale prices cannot exceed regular prices`,path:[`sale_prices`]}).refine(e=>a(e.sale_start_at,e.sale_end_at),{message:`Sale end must be after the sale start`,path:[`sale_end_at`]});exports.productSchema=l;
@@ -1 +0,0 @@
1
- const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../currency.cjs.js"),n=require("../coupon-server.cjs.js"),r=require("../customer.cjs.js"),i=require("../customer-addresses.cjs.js"),a=require("../payment-config.cjs.js");let o=require("@supabase/supabase-js"),s=require("crypto");s=e.__toESM(s,1);let c=require("@freemius/sdk");function l(e){let t=process.env[e];if(!t)return null;let n=t.trim();return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1).trim():n}function u(e){let t=e?.trim();if(!t)return{firstName:null,lastName:null};let[n,...r]=t.split(/\s+/);return{firstName:n||null,lastName:r.length>0?r.join(` `):null}}function d(e){if(e==null||e===``)return 0;let t=Number(e);return!Number.isFinite(t)||t<=0?0:Math.round(t)}function f(e){return e===!0||e===1||e===`1`||e===`true`}function p(e,t){let n=e?.[t];return Array.isArray(n)?n:n&&typeof n==`object`?[n]:[]}function m(e,t){for(let n of t){let t=p(e,n);if(t.length>0)return t}return Array.isArray(e)?e:[]}function h(e){if(e==null||e===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function g(e){return e===null?0:e>5e3?(console.warn(`[Freemius Sync] Suspiciously high price detected: ${e}. Assuming it is already in cents.`),Math.round(e)):Math.round(e*100)}function _(e){let t=Number(e);return!Number.isFinite(t)||t<1?1:Math.round(t)}function v(){let e=l(`FREEMIUS_CHECKOUT_PRODUCTS_JSON`);if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`?t:null}catch(e){return console.error(`[Freemius Checkout] Failed to parse FREEMIUS_CHECKOUT_PRODUCTS_JSON:`,e),null}}function y(e){let t=v(),n=String(e),r=t?.[n],i=l(`FREEMIUS_PRODUCT_ID`),a=l(`FREEMIUS_ECOMMERCE_SANDBOX_PUBLIC_KEY`),o=l(`FREEMIUS_ECOMMERCE_SANDBOX_SECRET_KEY`);return r?.publicKey?{publicKey:r.publicKey,secretKey:r.secretKey??null,apiKey:r.apiKey??null,source:`product-map`}:process.env.FREEMIUS_SANDBOX_ENABLED===`true`&&i&&i===n&&a?{publicKey:a,secretKey:o,apiKey:l(`FREEMIUS_API_KEY`),source:`single-product-sandbox-env`}:i&&i===n&&l(`FREEMIUS_PUBLIC_KEY`)?{publicKey:l(`FREEMIUS_PUBLIC_KEY`),secretKey:l(`FREEMIUS_SECRET_KEY`),apiKey:l(`FREEMIUS_API_KEY`),source:`single-product-env`}:{publicKey:l(`FREEMIUS_PUBLIC_KEY`),secretKey:l(`FREEMIUS_SECRET_KEY`),apiKey:l(`FREEMIUS_API_KEY`),source:`legacy-env`}}async function b(e){if(!e.apiKey)throw Error(`Missing Freemius API key for SDK sandbox generation.`);return new c.Freemius({productId:Number(e.productId),apiKey:e.apiKey,secretKey:e.secretKey,publicKey:e.publicKey}).checkout.getSandboxParams()}var x=class{getProviderName(){return`Freemius`}async createCheckoutSession({items:e,customerEmail:c,customerPhone:f,userId:p,billingAddress:m,shippingAddress:h,currencyCode:g,couponCode:_,couponContextItems:v}){let x=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,S=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!x||!S)return{error:`Missing Supabase credentials for checkout (Service Key required).`,url:null};let C=(0,o.createClient)(x,S);if(!e||e.length===0)return{error:`Cart is empty`,url:null};if(e.length!==1)return{error:`Freemius items must be checked out one at a time.`,url:null};let{data:w,error:T}=await C.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}),E=w??[];if(T||E.length===0)return{error:`Failed to resolve store currencies`,url:null};let D=t.getDefaultCurrency(E),O=E.find(e=>e.code===(g||``).toUpperCase())??D,k=e[0],{data:A,error:j}=await C.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, freemius_plan_id, freemius_product_id, trial_period_days, trial_requires_payment_method`).eq(`id`,k.product_id).single();if(j||!A)return{error:`Product not found`,url:null};let M=A.freemius_plan_id,N=A.freemius_product_id;if(!M||!N)return{error:`Product is not configured for Freemius checkout (missing Plan ID or Product ID)`,url:null};let P=t.resolveEffectivePriceForCurrency({prices:A.prices||{},salePrices:A.sale_prices||{},fallbackPrice:A.price,fallbackSalePrice:A.sale_price,saleStartAt:A.sale_start_at,saleEndAt:A.sale_end_at,scheduledPrice:A.scheduled_price,scheduledPrices:A.scheduled_prices||{},scheduledPriceAt:A.scheduled_price_at,currencyCode:O.code,currencies:E}),F=P.sale_price??P.price,I=t.isSaleWindowActive({saleStartAt:A.sale_start_at,saleEndAt:A.sale_end_at}),L=F*k.quantity,R=null,z=0;if(_){let t=await n.getCouponQuote({client:C,code:_,items:v&&v.length>0?v:e,currencyCode:O.code});if(!t.success)return{error:t.error,errorKey:t.errorKey,errorStatus:400,url:null};R=t.quote,z=Math.min(L,R.lineDiscounts.filter(e=>e.product_id===A.id).reduce((e,t)=>e+t.discount,0))}let B=d(A.trial_period_days),V=B>0?k.trial_preference?k.trial_preference:A.trial_requires_payment_method?`paid`:`free`:null,H=`pending`,U=u(m?.recipient_name??null),{data:W,error:G}=await C.from(`orders`).insert({status:H,total:Math.max(0,L-z),currency:O.code,exchange_rate_at_purchase:O.exchange_rate,subtotal:L,discount_total:z,coupon_id:R?.couponId??null,coupon_code:R?.code??null,discount_details:R?{code:R.code,discount_type:R.discountType,discount_amount:R.discountAmount,provider:`freemius`,provider_discounts:R.providerDiscounts,line_discounts:R.lineDiscounts,final_amount_owned_by:`freemius`}:null,provider:`freemius`,freemius_product_id:String(N),freemius_plan_id:String(M),user_id:p||null,customer_details:r.normalizeOrderCustomerDetails({email:c,phone:f,name:m?.recipient_name,billing:m,shipping:h})}).select(`id`).single();if(G||!W)return console.error(`Failed to create pending order:`,G),{error:`Failed to initiate order`,url:null};let{error:K}=await C.from(`order_items`).insert([{order_id:W.id,product_id:A.id,quantity:k.quantity,price_at_purchase:F}]);if(K&&console.error(`Failed to insert order items:`,K),p)try{await i.upsertDefaultUserAddresses({userId:p,billingAddress:m,shippingAddress:h,client:C}),await i.fillMissingUserProfileCheckoutDetails({userId:p,fullName:m?.recipient_name??h?.recipient_name??null,phone:f,client:C})}catch(e){console.error(`Failed to sync checkout profile defaults before checkout:`,e)}R&&await n.recordCouponRedemption({client:C,quote:R,orderId:W.id,provider:`freemius`,discountTotal:z,userId:p,customerEmail:c,metadata:{currency:O.code,subtotal:L,final_amount_owned_by:`freemius`}}),await a.hydrateFreemiusEnvFromDb();let q=process.env.FREEMIUS_SANDBOX_ENABLED===`true`,J=y(N),Y=J.publicKey,X=J.secretKey,Z=J.apiKey;if(!Y||q&&!X)return console.error(`Freemius checkout blocked: missing credentials (PUBLIC_KEY or SECRET_KEY) in CMS → Payments or environment.`),{error:`This store is not able to take payments right now. Please contact the seller to complete your purchase.`,errorKey:`ecommerce.checkout_payments_unavailable`,errorStatus:503,url:null};if(q&&J.source===`legacy-env`){let e=l(`FREEMIUS_PRODUCT_ID`),t=!!l(`FREEMIUS_ECOMMERCE_SANDBOX_PUBLIC_KEY`),n=!!l(`FREEMIUS_ECOMMERCE_SANDBOX_SECRET_KEY`);console.warn(`[Freemius Checkout] Sandbox is enabled for product ${N}, but no product-scoped checkout credentials were selected. Falling back to legacy FREEMIUS_PUBLIC_KEY/FREEMIUS_SECRET_KEY may open live checkout instead of sandbox.`,{configuredProductId:e,productIdsMatch:e===String(N),hasSandboxOverridePublicKey:t,hasSandboxOverrideSecretKey:n,hasCheckoutProductsJson:!!l(`FREEMIUS_CHECKOUT_PRODUCTS_JSON`)})}let Q=!1;if(q&&X&&Y)try{Q=await b({productId:N,publicKey:Y,secretKey:X,apiKey:Z})}catch(e){console.warn(`Freemius Checkout - SDK sandbox generation failed. Falling back to manual token generation.`,e,{credentialSource:J.source,hasApiKey:!!Z});let t=Math.floor(Date.now()/1e3).toString(),n=`${t}${N}${X}${Y}checkout`;Q={ctx:t,token:s.default.createHash(`md5`).update(n).digest(`hex`)}}let $=new URL(`https://checkout.freemius.com/app/${N}/plan/${M}/`);if(q&&X&&Y?($.searchParams.append(`sandbox`,Q.token),$.searchParams.append(`s_ctx_ts`,Q.ctx)):q&&$.searchParams.append(`sandbox`,`true`),c&&$.searchParams.append(`user_email`,c),U.firstName&&$.searchParams.append(`user_firstname`,U.firstName),U.lastName&&$.searchParams.append(`user_lastname`,U.lastName),$.searchParams.append(`currency`,O.code.toLowerCase()),k.billing_cycle&&$.searchParams.append(`billing_cycle`,k.billing_cycle),V&&$.searchParams.append(`trial`,V),R)$.searchParams.append(`coupon`,R.code);else if(I){let{data:e}=await C.from(`product_freemius_sale_coupons`).select(`freemius_coupon_code, is_active, starts_at, ends_at, sync_status`).eq(`product_id`,A.id).maybeSingle();e?.is_active&&e.sync_status===`synced`&&e.freemius_coupon_code&&t.isSaleWindowActive({saleStartAt:e.starts_at,saleEndAt:e.ends_at})&&$.searchParams.append(`coupon`,e.freemius_coupon_code)}return{url:$.toString(),customProps:{provider:`freemius`,plugin_id:N,plan_id:M,public_key:Y,user_email:c,user_firstname:U.firstName,user_lastname:U.lastName,credential_source:J.source,sandbox:Q,billing_cycle:k.billing_cycle,trial:V,trial_period_days:B,trial_requires_payment_method:A.trial_requires_payment_method,initial_order_status:H,coupon:R?.code??null,order_id:W.id}}}};async function S(e,t,n,r){let i=new Date().toUTCString().replace(`GMT`,`+0000`),a=`GET\n\n\n${i}\n${e}`,o=s.default.createHmac(`sha256`,r).update(a).digest(`hex`),c=`FS ${t}:${n}:${Buffer.from(o).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=/g,``)}`,l=await fetch(`https://api.freemius.com${e}`,{headers:{Authorization:c,Date:i,Accept:`application/json`}});if(!l.ok){let t=await l.text();throw console.error(`[Freemius API] [ERROR] ${e} returned ${l.status}: ${t}`),Error(`Freemius API failed on ${e}: ${l.status} - ${t}`)}return l.json()}async function C(){let e=l(`FREEMIUS_DEVELOPER_ID`),t=l(`FREEMIUS_PUBLIC_KEY`),n=l(`FREEMIUS_SECRET_KEY`),r=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,i=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!t||!n||!r||!i)throw Error(`Missing necessary environment variables for Freemius Sync.`);let a=(0,o.createClient)(r,i,{auth:{autoRefreshToken:!1,persistSession:!1}}),s=r=>S(r,e,t,n);try{console.log(`[Freemius Sync] Fetching all plugins for developer ${e}...`);let t=m(await s(`/v1/developers/${e}/plugins.json`),[`plugins`,`plugin`]);console.log(`[Freemius Sync] Found ${t.length} plugins. Syncing plans...`);let n=0,{data:r}=await a.from(`languages`).select(`id`).eq(`code`,`en`).single(),i=r?.id;if(!i)throw Error(`English language not found in database. Cannot sync products.`);for(let r of t){let t=r.id?.toString();if(!t){console.warn(`[Freemius Sync] Skipping plugin without an id:`,r);continue}let o=await T(a,e,t,r.title||r.name||`Freemius Product ${t}`,s,i);n+=o}return{success:!0,count:n}}catch(e){throw console.error(`[Freemius Sync] Global Error:`,e),e}}async function w(e){let t=l(`FREEMIUS_DEVELOPER_ID`),n=l(`FREEMIUS_PUBLIC_KEY`),r=l(`FREEMIUS_SECRET_KEY`),i=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,a=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!t||!n||!r||!i||!a)throw Error(`Missing environment variables for Freemius Sync.`);let s=(0,o.createClient)(i,a),c=e=>S(e,t,n,r),{data:u}=await s.from(`languages`).select(`id`).eq(`code`,`en`).single(),d=u?.id;if(!d)throw Error(`English language not found in database. Cannot sync products.`);let f=await c(`/v1/developers/${t}/plugins/${e}.json`),p=f.plugin??f;return{success:!0,count:await T(s,t,e,p.title||p.name||`Freemius Product ${e}`,c,d)}}async function T(e,t,n,r,i,a){console.log(`[Freemius Sync] Fetching plans for plugin: ${r} (${n})...`);let o=0;try{let s=m(await i(`/v1/developers/${t}/plugins/${n}/plans.json`),[`plans`,`plan`]);console.log(`[Freemius Sync] Received ${s.length} plans for plugin ${n}.`);for(let c of s){let s=c.id?.toString();if(!s){console.warn(`[Freemius Sync] Skipping plan without an id:`,c);continue}let l=c.name||c.title||s,u=c.title||l;console.log(`[Freemius Sync] Processing plan: ${u} (${s})...`);let p=c;if(p.trial_period===void 0||p.is_require_subscription===void 0)try{let e=await i(`/v1/developers/${t}/plugins/${n}/plans/${s}.json`),r=e.plan??e;p={...p,...r}}catch(e){console.warn(`[Freemius Sync] Could not fetch trial details for plan ${s}:`,e instanceof Error?e.message:e)}let v=d(p.trial_period),y=v>0&&f(p.is_require_subscription),b=0,x=[];try{if(x=m(await i(`/v1/developers/${t}/plugins/${n}/plans/${s}/pricing.json`),[`pricing`,`prices`,`pricings`]),x.length>0){let e=x[0];b=g(h(e.annual_price)??h(e.monthly_price)??h(e.lifetime_price))}console.log(`[Freemius Sync] Plan: ${u} -> Resolved Price (cents): ${b}`)}catch(e){console.warn(`[Freemius Sync] Could not fetch pricing for plan ${s}:`,e instanceof Error?e.message:e)}let S=`${r}-${u}`.toLowerCase().replace(/[^\w\s-]/g,``).replace(/[\s_]+/g,`-`).replace(/^-+|-+$/g,``),C={title:`${r} - ${u}`,slug:S,short_description:c.description||``,price:b,product_type:`digital`,payment_provider:`freemius`,freemius_plan_id:s,freemius_product_id:n,trial_period_days:v,trial_requires_payment_method:y,status:`active`,stock:999,sku:`FM-${n}-${s}`,language_id:a},{data:w,error:T}=await e.from(`products`).upsert(C,{onConflict:`language_id, sku`}).select();if(T||!w||w.length===0){console.error(`[Freemius Sync] Error upserting product ${C.sku}:`,T);continue}let E=w[0].id,{data:D,error:O}=await e.from(`freemius_plans`).select(`id`).eq(`product_id`,E).eq(`name`,l).maybeSingle();O&&console.warn(`[Freemius Sync] Could not check existing local plan for ${C.sku}:`,O.message||O);let k=``;if(D){k=D.id;let{error:t}=await e.from(`freemius_plans`).update({title:u,updated_at:new Date().toISOString()}).eq(`id`,k);t&&console.warn(`[Freemius Sync] Could not update local plan ${k}:`,t.message||t)}else{let{data:t,error:n}=await e.from(`freemius_plans`).insert({product_id:E,name:l,title:u}).select(`id`).single();n&&console.warn(`[Freemius Sync] Could not insert local plan for ${C.sku}:`,n.message||n),t&&(k=t.id)}if(k&&x.length>0)for(let t of x){let n=_(t.licenses??t.license_quota??t.quota),{data:r,error:i}=await e.from(`freemius_pricing`).select(`id`).eq(`plan_id`,k).eq(`license_quota`,n).maybeSingle();i&&console.warn(`[Freemius Sync] Could not check pricing for plan ${k}, quota ${n}:`,i.message||i);let a={api_monthly_price:h(t.monthly_price),api_annual_price:h(t.annual_price),api_lifetime_price:h(t.lifetime_price),updated_at:new Date().toISOString()};if(r){let{error:t}=await e.from(`freemius_pricing`).update(a).eq(`id`,r.id);t&&console.warn(`[Freemius Sync] Could not update pricing ${r.id}:`,t.message||t)}else{let{error:t}=await e.from(`freemius_pricing`).insert({plan_id:k,license_quota:n,...a});t&&console.warn(`[Freemius Sync] Could not insert pricing for plan ${k}, quota ${n}:`,t.message||t)}}console.log(`[Freemius Sync] Successfully fully synced product ${C.sku}.`),o++}}catch(e){console.error(`[Freemius Sync] Failed sync for plugin ${n}:`,e.message)}return o}exports.FreemiusProvider=x,exports.parseFreemiusCheckoutCredentialsMap=v,exports.readFreemiusEnvValue=l,exports.resolveFreemiusCheckoutCredentials=y,exports.syncFreemiusProductsToSupabase=C,exports.syncSingleFreemiusProduct=w;
@@ -1 +0,0 @@
1
- const e=require("../types.cjs.js"),t=require("../currency.cjs.js"),n=require("../coupons.cjs.js"),r=require("../coupon-server.cjs.js"),i=require("../countries.cjs.js"),a=require("../variation-utils.cjs.js"),o=require("../inventory-settings.cjs.js"),s=require("../tax-calculation.cjs.js"),c=require("../customer.cjs.js"),l=require("../customer-addresses.cjs.js"),u=require("../order-tax-details.cjs.js"),d=require("../stripe/client.cjs.js");let ee=require("@supabase/supabase-js");var te=i.countries.map(e=>e.code),f=new Set(`bg.cs.da.de.el.en.en-GB.es.es-419.et.fi.fil.fr.hr.hu.id.it.ja.ko.lt.lv.ms.mt.nb.nl.pl.pt.pt-BR.ro.ru.sk.sl.sv.th.tr.vi.zh.zh-HK.zh-TW`.split(`.`));function p(e){if(e)return{line1:e.line1||void 0,line2:e.line2||void 0,city:e.city||void 0,state:e.state||void 0,postal_code:e.postal_code||void 0,country:e.country_code||void 0}}function ne(e){let t=e?.trim().replace(`_`,`-`);if(!t)return;let n=[t,t.toLowerCase(),t.split(`-`)[0].toLowerCase()];for(let e of n)if(f.has(e))return e}function re(e,t){return a.resolveTranslatedText(e.name,e.name_translations||null,t)}async function ie(e){if(!e.email)return null;let t=await d.getStripeClient(),n=p(e.shippingAddress),r=e.shippingAddress?.recipient_name||e.billingAddress?.recipient_name||void 0,i={email:e.email,name:e.billingAddress?.recipient_name||e.shippingAddress?.recipient_name||void 0,phone:e.phone||void 0,address:p(e.billingAddress),metadata:e.userId?{userId:e.userId}:void 0,...n&&r?{shipping:{name:r,phone:e.phone||void 0,address:n}}:{}};try{let n=(await t.customers.list({email:e.email,limit:1})).data[0];return n?(await t.customers.update(n.id,i),n.id):(await t.customers.create(i)).id}catch(e){return console.error(`Failed to upsert Stripe customer for checkout prefill:`,e),null}}var m=class{getProviderName(){return`Stripe`}async createCheckoutSession({items:i,customerEmail:a,customerPhone:f,userId:p,billingAddress:m,shippingAddress:h,shippingMethodId:g,currencyCode:ae,locale:_,couponCode:v,couponContextItems:y}){let oe=await d.getStripeClient(),b=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,x=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!b||!x)return console.error(`Missing Supabase credentials for checkout (Service Key required).`),{error:`Internal Server Error`,url:null};let S=(0,ee.createClient)(b,x),C=process.env.NEXT_PUBLIC_URL||`http://localhost:4200`,se=i.some(t=>!e.isDigitalItem(t));if(!i.length)return{error:`Cart is empty`,url:null};let{data:ce,error:le}=await S.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}),w=ce??[];if(le||w.length===0)return console.error(`Error fetching currencies for checkout:`,le),{error:`Failed to resolve store currencies`,url:null};let T=t.getDefaultCurrency(w),E=w.find(e=>e.code===(ae||``).toUpperCase())??T,D=E.code.toLowerCase(),O=await o.getEcommerceInventorySettings(S),ue=i.map(e=>e.product_id),k=i.map(e=>e.variant_id).filter(e=>!!e),{data:A,error:j}=await S.from(`products`).select(`id, title, sku, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, stock, is_taxable`).in(`id`,ue);if(j||!A)return console.error(`Error fetching products for validation:`,j),{error:`Failed to validate product prices`,url:null};let{data:de,error:M}=k.length?await S.from(`product_variants`).select(`id, product_id, sku, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, stock_quantity`).in(`id`,k):{data:[],error:null};if(M)return console.error(`Error fetching variants for validation:`,M),{error:`Failed to validate product variants`,url:null};let N=new Map(A.map(e=>[e.id,e])),P=new Map((de||[]).map(e=>[e.id,e])),F=new Set,I=new Map;for(let e of i){let t=N.get(e.product_id);if(!t)continue;let n=(e.variant_id?P.get(e.variant_id):null)?.sku||t.sku;n&&(F.add(n),I.set(n,(I.get(n)??0)+e.quantity))}let{data:fe,error:L}=F.size?await S.from(`inventory_items`).select(`sku, quantity`).in(`sku`,[...F]):{data:[],error:null};if(L)return console.error(`Error fetching SKU inventory for validation:`,L),{error:`Failed to validate SKU inventory`,url:null};let R=new Map((fe||[]).map(e=>[e.sku,Math.max(0,e.quantity??0)])),z=[],B=[],pe=[],V=0,H=0,U=null;if(v){let e=await r.getCouponQuote({client:S,code:v,items:y&&y.length>0?y:i,currencyCode:E.code});if(!e.success)return{error:e.error,errorKey:e.errorKey,errorStatus:400,url:null};U=e.quote}let me=r.getQuoteLineDiscountMap(U),he=e=>{let t=e.unitAmount*e.quantity,n=Math.max(0,t-e.lineDiscount);if(n<=0)return;let r=Math.floor(n/e.quantity),i=n-r*e.quantity,a=(t,n)=>{n<=0||t<=0||z.push({price_data:{currency:e.currency,product_data:{name:e.name,tax_code:s.getStripeTaxCodeForProduct(e.isTaxable),metadata:{productId:e.productId,variantId:e.variantId||``}},tax_behavior:`exclusive`,unit_amount:t},quantity:n})};a(r,e.quantity-i),a(r+1,i)};for(let e of i){let r=N.get(e.product_id);if(!r)return console.warn(`Product ${e.product_id} not found in DB.`),{url:null,...o.createInventoryUnavailableError(e.title)};let i=t.resolveEffectivePriceForCurrency({prices:t.normalizePriceMap(r.prices),salePrices:r.sale_prices||{},fallbackPrice:r.price,fallbackSalePrice:r.sale_price,saleStartAt:r.sale_start_at,saleEndAt:r.sale_end_at,scheduledPrice:r.scheduled_price,scheduledPrices:t.normalizePriceMap(r.scheduled_prices),scheduledPriceAt:r.scheduled_price_at,currencyCode:E.code,currencies:w}),a=i.sale_price??i.price,s=r.title,c=null;if(e.variant_id){let n=P.get(e.variant_id);if(!n||n.product_id!==e.product_id)return{url:null,...o.createInventoryUnavailableError(e.title)};let i=I.get(n.sku)??e.quantity,l=R.has(n.sku)?R.get(n.sku)??0:Math.max(0,n.stock_quantity??0);if(O.trackQuantities&&i>l)return{url:null,...o.createInventoryInsufficientError(e.title,l)};let u=t.resolveEffectivePriceForCurrency({prices:t.normalizePriceMap(n.prices),salePrices:n.sale_prices||{},fallbackPrice:n.price,fallbackSalePrice:n.sale_price,saleStartAt:n.sale_start_at,saleEndAt:n.sale_end_at,scheduledPrice:n.scheduled_price,scheduledPrices:t.normalizePriceMap(n.scheduled_prices),scheduledPriceAt:n.scheduled_price_at,currencyCode:E.code,currencies:w});a=u.sale_price??u.price,c=n.id,s=e.variant_label?`${r.title} - ${e.variant_label}`:`${r.title} - ${n.sku}`}else{let t=I.get(r.sku)??e.quantity,n=R.has(r.sku)?R.get(r.sku)??0:Math.max(0,r.stock??0);if(O.trackQuantities&&t>n)return{url:null,...o.createInventoryInsufficientError(e.title,n)}}let l=r.is_taxable??!0;if(a<0)return{error:`A product variation produced an invalid price.`,url:null};let u=Math.min(a*e.quantity,me.get(n.getCartLineCouponKey(e))??0);he({name:s,currency:D,productId:r.id,variantId:c,isTaxable:l,unitAmount:a,quantity:e.quantity,lineDiscount:u}),V+=a*e.quantity,H+=u,pe.push({product_id:r.id,quantity:e.quantity,price_at_purchase:a,variant_id:c}),B.push({product_id:r.id,quantity:e.quantity,unit_amount:a,discount_amount:u,is_taxable:l})}if(z.length===0&&H>=V)return{error:`This coupon would reduce the Stripe order to zero. Use a smaller discount for Stripe checkout.`,errorKey:`ecommerce.coupon_zero_total_not_supported`,errorStatus:400,url:null};if(z.length===0)return{error:`No valid items in cart`,url:null};let W=0,G=null;if(g){let{data:e,error:n}=await S.from(`shipping_zone_methods`).select(`id, name, name_translations, cost_amount, cost_currency`).eq(`id`,g).single();if(n)return console.error(`Failed to load shipping method:`,n),{error:`Failed to load shipping method`,url:null};W=t.convertMinorUnitAmount({amount:e.cost_amount??0,fromCurrencyCode:e.cost_currency||T.code,toCurrencyCode:E.code,currencies:w}),G=re(e,_)}let K=se?h??m:m,q;try{q=await s.calculateCheckoutTaxes(S,{items:B,destination:{country_code:K?.country_code,state:K?.state}})}catch(e){return console.error(`Failed to calculate checkout taxes:`,e),{error:`Failed to calculate taxes`,url:null}}W>0&&G&&z.push({price_data:{currency:D,product_data:{name:G,tax_code:q.enabled&&q.mode===`automatic`?s.STRIPE_TAX_CODE_SHIPPING:s.STRIPE_TAX_CODE_NONTAXABLE},tax_behavior:`exclusive`,unit_amount:W},quantity:1});let J=q.enabled&&q.mode===`manual`&&!q.isPendingExternalCalculation?q.amount:0;J>0&&z.push({price_data:{currency:D,product_data:{name:`Tax`,tax_code:s.STRIPE_TAX_CODE_NONTAXABLE},tax_behavior:`exclusive`,unit_amount:J},quantity:1});let ge=c.normalizeOrderCustomerDetails({email:a,phone:f,name:m?.recipient_name,billing:m,shipping:h}),Y=E.code,_e=u.buildOrderTaxDetailsFromCalculation({calculation:q,subtotal:V,shippingTotal:W,total:Math.max(0,V-H)+W+J,currency:Y}),ve=Math.max(0,V-H)+W+J,{data:X,error:Z}=await S.from(`orders`).insert({status:`pending`,total:ve,currency:Y,exchange_rate_at_purchase:E.exchange_rate,subtotal:V,shipping_total:W,tax_total:J,tax_details:_e,coupon_id:U?.couponId??null,coupon_code:U?.code??null,discount_total:H,discount_details:U?{code:U.code,discount_type:U.discountType,discount_amount:U.discountAmount,provider:`stripe`,provider_discounts:U.providerDiscounts,line_discounts:U.lineDiscounts}:null,provider:`stripe`,user_id:p,customer_details:ge}).select(`id`).single();if(Z||!X)return console.error(`Failed to create pending order:`,Z),{error:`Failed to initiate order`,url:null};let Q=X.id,{error:ye}=await S.from(`order_items`).insert(pe.map(e=>({order_id:Q,product_id:e.product_id,variant_id:e.variant_id??null,quantity:e.quantity,price_at_purchase:e.price_at_purchase})));if(ye)return console.error(`Failed to insert order items:`,ye),await S.from(`orders`).update({status:`failed`}).eq(`id`,Q),{error:`Failed to record order items`,url:null};if(p)try{await l.upsertDefaultUserAddresses({userId:p,billingAddress:m,shippingAddress:h,client:S}),await l.fillMissingUserProfileCheckoutDetails({userId:p,fullName:m?.recipient_name??h?.recipient_name??null,phone:f,client:S})}catch(e){console.error(`Failed to sync checkout profile defaults before checkout:`,e)}U&&await r.recordCouponRedemption({client:S,quote:U,orderId:Q,provider:`stripe`,discountTotal:H,userId:p,customerEmail:a,metadata:{currency:E.code,subtotal:V,shipping_total:W,tax_total:J}});let $=await ie({email:a,phone:f,userId:p,billingAddress:m,shippingAddress:h});try{let e=await oe.checkout.sessions.create({mode:`payment`,success_url:`${C}/checkout/success?session_id={CHECKOUT_SESSION_ID}`,cancel_url:`${C}/checkout`,locale:ne(_),line_items:z,automatic_tax:q.enabled&&q.mode===`automatic`?{enabled:!0}:void 0,billing_address_collection:`auto`,customer:$||void 0,customer_email:$?void 0:a||void 0,customer_creation:$?void 0:`if_required`,customer_update:$?{name:`auto`,address:`auto`,shipping:`auto`}:void 0,shipping_address_collection:se?{allowed_countries:te}:void 0,metadata:{orderId:Q,taxMode:q.mode,currencyCode:E.code,couponCode:U?.code||``}}),{error:t}=await S.from(`orders`).update({stripe_session_id:e.id}).eq(`id`,Q);return t&&console.error(`Failed to save Stripe session ID on order:`,t),{url:e.url}}catch(e){return console.error(`Stripe session creation failed:`,e),await S.from(`orders`).update({status:`failed`}).eq(`id`,Q),e?.name===`StripeNotConfiguredError`||e?.type===`StripeAuthenticationError`?{error:`This store is not able to take payments right now. Please contact the seller to complete your purchase.`,errorKey:`ecommerce.checkout_payments_unavailable`,errorStatus:503,url:null}:{error:`Something went wrong while preparing your checkout. Please try again.`,errorKey:`ecommerce.checkout_internal_server_error`,url:null}}}};exports.StripeProvider=m;
@@ -1 +0,0 @@
1
- "use server";const e=require("../coupon-server.cjs.js");let t=require("@nextblock-cms/db/server");async function n(n){try{let r=(0,t.getServiceRoleSupabaseClient)();return await e.getCouponQuote({client:r,code:n.code,items:Array.isArray(n.items)?n.items:[],currencyCode:n.currencyCode})}catch(e){return console.error(`Failed to validate coupon:`,e),{success:!1,error:e.message||`Failed to validate coupon.`,errorKey:`ecommerce.coupon_validation_failed`}}}exports.getCouponQuoteAction=n;
@@ -1 +0,0 @@
1
- "use server";const e=require("../customer.cjs.js"),t=require("../customer-addresses.cjs.js");let n=require("@nextblock-cms/db/server"),r=require("next/cache");async function i(i){let a=(0,n.createClient)(),{data:{user:o},error:s}=await a.auth.getUser();if(s||!o)throw Error(`Unauthorized`);let c={full_name:i.full_name||null,avatar_url:i.avatar_url||null,website:i.website||null,phone:i.phone||null,updated_at:new Date().toISOString()},{error:l}=await a.from(`profiles`).update(c).eq(`id`,o.id);if(l)throw console.error(`Error updating profile:`,l),Error(`Failed to update profile`);let u=e.normalizeCustomerAddress(i.billing_address),d=i.use_billing_for_shipping?u:e.normalizeCustomerAddress(i.shipping_address);return await t.upsertDefaultUserAddresses({userId:o.id,billingAddress:u,shippingAddress:d,client:a}),(0,r.revalidatePath)(`/profile`),(0,r.revalidatePath)(`/checkout`),{success:!0}}exports.updateProfile=i;
@@ -1 +0,0 @@
1
- "use server";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../product-actions.cjs.js");let t=require("@nextblock-cms/db/server");async function n(n,r,i=[],a=[]){let o=(0,t.createClient)(),{data:s,error:c}=await e.fetchTranslatedProductsForCartInternal(o,n,r,i,a);return c?(console.error(`[getTranslatedProductsForCart] Error:`,c),[]):s||[]}exports.getTranslatedProductsForCart=n;
@@ -1 +0,0 @@
1
- "use server";const e=require("../countries.cjs.js"),t=require("../shipping/resolver.cjs.js"),n=require("../states.cjs.js");async function r(r,i,a,o){try{let s=e.normalizeCountryCode(i.country);return s?{success:!0,methods:await t.resolveShippingOptions(r,{...i,country:s,state:n.normalizeSubdivisionCode(s,i.state)||void 0},a,o)}:{success:!1,error:`Country is required for shipping calculation`,errorKey:`ecommerce.shipping_country_required`}}catch(e){return console.error(`Failed to resolve shipping options:`,e),{success:!1,error:e.message||`Failed to calculate shipping`,errorKey:`ecommerce.shipping_calculation_failed`}}}exports.getShippingEstimates=r;
@@ -1 +0,0 @@
1
- "use server";const e=require("../coupon-server.cjs.js"),t=require("../tax-calculation.cjs.js");let n=require("@nextblock-cms/db/server");async function r(r,i,a=`USD`,o,s){try{let c=(0,n.createClient)(),l=(0,n.getServiceRoleSupabaseClient)(),{data:u}=await c.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}),d=u??[],f;if(o){let t=await e.getCouponQuote({client:l,code:o,items:s&&s.length>0?s:r,currencyCode:a});t.success&&(f=e.getQuoteLineDiscountMap(t.quote))}let p=await t.buildCheckoutTaxableItemsFromCart(c,r,a,d,f);return{success:!0,tax:await t.calculateCheckoutTaxes(c,{items:p,destination:i})}}catch(e){return console.error(`Failed to estimate taxes:`,e),{success:!1,error:e.message||`Failed to calculate taxes`}}}exports.getTaxEstimate=r;
@@ -1 +0,0 @@
1
- const e=require("./currency.cjs.js");let t=require("@nextblock-cms/utils");var n=[`auto`,`manual`];function r(e){if(typeof e==`string`){let t=e.trim().toLowerCase();if(n.includes(t))return t}return`auto`}function i(e,t=0){return typeof e==`number`&&Number.isFinite(e)&&e>=0?Math.round(e):t}function a(n){let r=(0,t.normalizeCurrencyCode)(n.sourceCurrencyCode),i=e.normalizePriceMap(n.amountMap);if(i[r]!==void 0)return r;let a=Object.keys(i)[0];return a?(0,t.normalizeCurrencyCode)(a):e.getDefaultCurrency(n.currencies).code}function o(t){let n=r(t.mode),o=e.normalizePriceMap(t.costAmounts),s=e.normalizePriceMap(t.minOrderAmounts),c=a({amountMap:Object.keys(o).length>0?o:s,sourceCurrencyCode:t.sourceCurrencyCode,currencies:t.currencies}),l=o[c]??i(t.fallbackCostAmount),u=s[c]??i(t.fallbackMinOrderAmount);if(n===`auto`)return{mode:n,sourceCurrencyCode:c,costAmounts:{[c]:l},minOrderAmounts:{[c]:u}};let d=Object.keys(o).length>0?{...o}:{[c]:l},f=Object.keys(s).length>0?{...s}:{[c]:u};return d[c]===void 0&&(d[c]=l),f[c]===void 0&&(f[c]=u),{mode:n,sourceCurrencyCode:c,costAmounts:d,minOrderAmounts:f}}function s(n){let o=r(n.mode),s=e.normalizePriceMap(n.amountMap),c=(0,t.normalizeCurrencyCode)(n.currencyCode);if(o===`manual`&&s[c]!==void 0)return s[c];let l=a({amountMap:s,sourceCurrencyCode:n.sourceCurrencyCode,currencies:n.currencies}),u=s[l]??i(n.fallbackAmount);return c===l?u:e.convertMinorUnitAmount({amount:u,fromCurrencyCode:l,toCurrencyCode:c,currencies:n.currencies})}exports.SHIPPING_RATE_CURRENCY_MODES=n,exports.normalizeShippingRateCurrencyMode=r,exports.resolveShippingRateAmountForCurrency=s,exports.sanitizeShippingRateAmountMaps=o;
package/lib/states.cjs.js DELETED
@@ -1 +0,0 @@
1
- const e=require("./countries.cjs.js");var t={US:[{code:`AL`,name:`Alabama`},{code:`AK`,name:`Alaska`},{code:`AZ`,name:`Arizona`},{code:`AR`,name:`Arkansas`},{code:`CA`,name:`California`},{code:`CO`,name:`Colorado`},{code:`CT`,name:`Connecticut`},{code:`DE`,name:`Delaware`},{code:`DC`,name:`District of Columbia`},{code:`FL`,name:`Florida`},{code:`GA`,name:`Georgia`},{code:`HI`,name:`Hawaii`},{code:`ID`,name:`Idaho`},{code:`IL`,name:`Illinois`},{code:`IN`,name:`Indiana`},{code:`IA`,name:`Iowa`},{code:`KS`,name:`Kansas`},{code:`KY`,name:`Kentucky`},{code:`LA`,name:`Louisiana`},{code:`ME`,name:`Maine`},{code:`MD`,name:`Maryland`},{code:`MA`,name:`Massachusetts`},{code:`MI`,name:`Michigan`},{code:`MN`,name:`Minnesota`},{code:`MS`,name:`Mississippi`},{code:`MO`,name:`Missouri`},{code:`MT`,name:`Montana`},{code:`NE`,name:`Nebraska`},{code:`NV`,name:`Nevada`},{code:`NH`,name:`New Hampshire`},{code:`NJ`,name:`New Jersey`},{code:`NM`,name:`New Mexico`},{code:`NY`,name:`New York`},{code:`NC`,name:`North Carolina`},{code:`ND`,name:`North Dakota`},{code:`OH`,name:`Ohio`},{code:`OK`,name:`Oklahoma`},{code:`OR`,name:`Oregon`},{code:`PA`,name:`Pennsylvania`},{code:`RI`,name:`Rhode Island`},{code:`SC`,name:`South Carolina`},{code:`SD`,name:`South Dakota`},{code:`TN`,name:`Tennessee`},{code:`TX`,name:`Texas`},{code:`UT`,name:`Utah`},{code:`VT`,name:`Vermont`},{code:`VA`,name:`Virginia`},{code:`WA`,name:`Washington`},{code:`WV`,name:`West Virginia`},{code:`WI`,name:`Wisconsin`},{code:`WY`,name:`Wyoming`}],CA:[{code:`AB`,name:`Alberta`},{code:`BC`,name:`British Columbia`},{code:`MB`,name:`Manitoba`},{code:`NB`,name:`New Brunswick`},{code:`NL`,name:`Newfoundland and Labrador`},{code:`NS`,name:`Nova Scotia`},{code:`NT`,name:`Northwest Territories`},{code:`NU`,name:`Nunavut`},{code:`ON`,name:`Ontario`},{code:`PE`,name:`Prince Edward Island`},{code:`QC`,name:`Quebec`},{code:`SK`,name:`Saskatchewan`},{code:`YT`,name:`Yukon`}]},n={CA:{BC:`Colombie-Britannique`,NB:`Nouveau-Brunswick`,NL:`Terre-Neuve-et-Labrador`,NS:`Nouvelle-Écosse`,NT:`Territoires du Nord-Ouest`,PE:`Île-du-Prince-Édouard`,QC:`Québec`},US:{CA:`Californie`,DC:`District de Columbia`,FL:`Floride`,GA:`Géorgie`,HI:`Hawaï`,LA:`Louisiane`,NC:`Caroline du Nord`,ND:`Dakota du Nord`,NM:`Nouveau-Mexique`,PA:`Pennsylvanie`,SC:`Caroline du Sud`,SD:`Dakota du Sud`,VA:`Virginie`,WV:`Virginie-Occidentale`}};function r(t,r,i){if(!i||!i.toLowerCase().startsWith(`fr`))return r.name;let a=e.normalizeCountryCode(t);return a&&n[a]?.[r.code]||r.name}var i={US:{CALIFORNIA:`CA`,NEWYORK:`NY`,"NEW YORK":`NY`,DISTRICTOFCOLUMBIA:`DC`,"DISTRICT OF COLUMBIA":`DC`},CA:{QUEBEC:`QC`,ONTARIO:`ON`,"BRITISH COLUMBIA":`BC`,BRITISHCOLUMBIA:`BC`,"NEWFOUNDLAND AND LABRADOR":`NL`,NEWFOUNDLANDANDLABRADOR:`NL`,"NORTHWEST TERRITORIES":`NT`,NORTHWESTTERRITORIES:`NT`,"PRINCE EDWARD ISLAND":`PE`,PRINCEEDWARDISLAND:`PE`}};function a(n){let r=e.normalizeCountryCode(n);return r?t[r]??[]:[]}function o(e){return a(e).length>0}function s(n,r){let a=e.normalizeCountryCode(n),o=r?.trim();if(!a||!o)return o||null;let s=t[a];if(!s?.length)return o.toUpperCase();let c=o.toUpperCase(),l=s.find(e=>e.code===c);if(l)return l.code;let u=s.find(e=>e.name.toUpperCase()===c);if(u)return u.code;let d=c.replace(/\s+/g,``);return i[a]?.[c]??i[a]?.[d]??c}function c(n,r){let i=e.normalizeCountryCode(n),a=s(n,r);return!i||!a?r??null:t[i]?.find(e=>e.code===a)?.name??a}exports.STATES_BY_COUNTRY=t,exports.countryUsesStructuredStates=o,exports.getStatesForCountry=a,exports.getSubdivisionLabel=r,exports.normalizeSubdivisionCode=s,exports.resolveSubdivisionName=c;
@@ -1 +0,0 @@
1
- const e=require("../currency.cjs.js"),t=require("../shipping/resolver.cjs.js"),n=require("./client.cjs.js");let r=require("@nextblock-cms/db/server"),i=require("@supabase/supabase-js");var a=async(a,o,s,c)=>{let l=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,u=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!l||!u)return console.error(`Missing Supabase credentials for checkout (Service Key required).`),{error:`Internal Server Error`,url:null};let d=(0,i.createClient)(l,u),f=process.env.NEXT_PUBLIC_URL||`http://localhost:4200`;if(!a.length)return{error:`Cart is empty`,url:null};let{data:p}=await d.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}),m=p??[],h=e.getDefaultCurrency(m),g=m.find(e=>e.code===(c||``).toUpperCase())??h;if(!await(0,r.verifyPackageOnline)(`ecommerce`))return{error:`E-Commerce Package not active. Please purchase a license to accept payments.`,url:null};let _=a.map(e=>e.product_id),{data:v,error:y}=await d.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at`).in(`id`,_);if(y||!v)return console.error(`Error fetching products for validation:`,y),{error:`Failed to validate product prices`,url:null};let b=new Map(v.map(e=>[e.id,e])),x=[],S=0,C=[];for(let t of a){let n=b.get(t.product_id);if(!n){console.warn(`Product ${t.product_id} not found in DB, skipping.`);continue}let r=e.resolveEffectivePriceForCurrency({prices:n.prices||{},salePrices:n.sale_prices||{},fallbackPrice:n.price,fallbackSalePrice:n.sale_price,saleStartAt:n.sale_start_at,saleEndAt:n.sale_end_at,scheduledPrice:n.scheduled_price,scheduledPrices:n.scheduled_prices||{},scheduledPriceAt:n.scheduled_price_at,currencyCode:g.code,currencies:m}),i=r.sale_price??r.price;i<=0&&console.warn(`[Checkout Session Warning] Product ${n.title} has zero or negative price!`),x.push({price_data:{currency:g.code.toLowerCase(),product_data:{name:n.title,images:[],metadata:{productId:n.id}},unit_amount:i},quantity:t.quantity}),S+=i*t.quantity,C.push({product_id:n.id,quantity:t.quantity,price_at_purchase:i})}if(x.length===0)return{error:`No valid items in cart`,url:null};let{data:w,error:T}=await d.from(`orders`).insert({total:S,user_id:o,currency:g.code,exchange_rate_at_purchase:g.exchange_rate}).select(`id`).single();if(T||!w)return console.error(`Failed to create pending order:`,T),console.error(`Order Data attempted:`,{status:`pending`,total:S}),{error:`Failed to initiate order: ${T?.message||`Unknown error`}`,url:null};let E=C.map(e=>({order_id:w.id,product_id:e.product_id,quantity:e.quantity,price_at_purchase:e.price_at_purchase})),{error:D}=await d.from(`order_items`).insert(E);D&&console.error(`Failed to insert order items:`,D);let O=[],k=s;if(!k&&o){let{data:e}=await d.from(`user_addresses`).select(`country_code, state_code, postal_code`).eq(`user_id`,o).eq(`address_type`,`shipping`).limit(1).single();e&&(k={country:e.country_code,state:e.state_code,postal_code:e.postal_code})}k&&(O=(await t.resolveShippingOptions(S,k,null,g.code)).map(e=>({shipping_rate_data:{type:`fixed_amount`,fixed_amount:{amount:e.amount,currency:e.currency.toLowerCase()},display_name:e.name}})));try{let e=await(await n.getStripeClient()).checkout.sessions.create({mode:`payment`,success_url:`${f}/checkout/success?session_id={CHECKOUT_SESSION_ID}`,cancel_url:`${f}/`,line_items:x,billing_address_collection:`required`,shipping_address_collection:{allowed_countries:`US.CA.GB.AU.NZ.IE.FR.DE.IT.ES.MX.BR.AR.CL.CO.PE.ZA.NG.KE.IN.JP.KR.CN.SG.MY.PH.TH.VN.ID.AE.SA.EG.MA.DZ.TN.PT.NL.BE.CH.AT.SE.NO.DK.FI.PL.CZ.HU.RO.BG.GR.TR.IL.CY.MT`.split(`.`)},shipping_options:O.length>0?O:void 0,metadata:{orderId:w.id}});return await d.from(`orders`).update({stripe_session_id:e.id}).eq(`id`,w.id),{url:e.url}}catch(e){return console.error(`Stripe session creation failed:`,e),{error:e.message,url:null}}};exports.createCheckoutSession=a;
@@ -1 +0,0 @@
1
- const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../payment-config.cjs.js");let n=require("stripe");n=e.__toESM(n,1);var r=null,i=null,a=class extends Error{constructor(){super(`Stripe is not configured: no secret key found in CMS → Payments or STRIPE_SECRET_KEY.`),this.name=`StripeNotConfiguredError`}};async function o(){let e=await t.resolveStripeSecretKey();if(!e)throw new a;return r&&i===e?r:(r=new n.default(e,{typescript:!0}),i=e,r)}exports.StripeNotConfiguredError=a,exports.getStripeClient=o;
@@ -1 +0,0 @@
1
- const e=require("../customer.cjs.js"),t=require("../customer-addresses.cjs.js"),n=require("../order-tax-details.cjs.js"),r=require("./client.cjs.js"),i=require("../order-inventory.cjs.js"),a=require("../invoice-server.cjs.js");let o=require("@supabase/supabase-js");var s=[`total_details.breakdown`],c=[`data.taxes.rate`];function l(){let e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,t=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!t)throw Error(`Missing Supabase Service Role environment variables`);return(0,o.createClient)(e,t,{auth:{autoRefreshToken:!1,persistSession:!1}})}function u(t,n){return t?e.normalizeCustomerAddress({recipient_name:n,line1:t.line1??null,line2:t.line2??null,city:t.city??null,state:t.state??null,postal_code:t.postal_code??null,country_code:t.country??null}):null}function d(t){let n=t??{};return e.normalizeOrderCustomerDetails({email:typeof n.email==`string`?n.email:null,name:typeof n.name==`string`?n.name:null,phone:typeof n.phone==`string`?n.phone:null,billing:n.billing??null,shipping:n.shipping??null})}async function f(o){let f=l(),p=await r.getStripeClient(),m=o;try{m=await p.checkout.sessions.retrieve(o.id,{expand:[...s]})}catch(e){console.error(`[Stripe Sync] Failed to rehydrate session tax details:`,e)}let h=m.metadata?.orderId,g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`stripe_session_id`,o.id).maybeSingle();h&&(g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`id`,h).maybeSingle());let{data:_,error:v}=await g;if(v||!_)throw Error(v?.message||`Order lookup failed`);let y=d(_.customer_details),b=n.normalizeOrderTaxDetails(_.tax_details),x=u(m.customer_details?.address,m.customer_details?.name??y.name),S=m.shipping_details,C=m.collected_information?.shipping_details??S??null,w=u(C?.address,C?.name??y.name),T=e.normalizeOrderCustomerDetails({email:m.customer_details?.email??y.email,name:m.customer_details?.name??y.name,phone:m.customer_details?.phone??y.phone,billing:y.billing??x,shipping:y.shipping??w}),E=_.status===`paid`,D=await p.checkout.sessions.listLineItems(m.id,{limit:100,expand:[...c]}),O=n.buildOrderTaxDetailsFromStripeSession({session:m,lineItems:D.data,subtotal:typeof _.subtotal==`number`?_.subtotal:b?.subtotal??0,shippingTotal:typeof _.shipping_total==`number`?_.shipping_total:b?.shipping_total??0,fallbackMode:b?.mode??`automatic`,currency:(m.currency??_.currency??b?.currency??`USD`).toUpperCase()}),k=O.tax_total>0||O.lines.length>0?O:b??O,A=k?.tax_total??(typeof _.tax_total==`number`?_.tax_total:0),j=(m.currency??_.currency??k?.currency??`USD`).toUpperCase(),M={status:`paid`,stripe_session_id:m.id,payment_intent_id:typeof m.payment_intent==`string`?m.payment_intent:null,provider:`stripe`,customer_details:T,total:typeof m.amount_total==`number`?m.amount_total:_.total,currency:j,tax_total:A,tax_details:k},{error:N}=await f.from(`orders`).update(M).eq(`id`,_.id);if(N)throw Error(N.message);if(_.user_id)try{await t.upsertDefaultUserAddresses({userId:_.user_id,billingAddress:T.billing,shippingAddress:T.shipping,client:f})}catch(e){console.error(`[Stripe Sync] Failed to refresh saved customer addresses:`,e)}let P=await a.assignInvoiceMetadata({orderId:_.id,client:f});return await i.applyOrderInventoryDeduction(f,_.id),{orderId:_.id,alreadyPaid:E,customerDetails:T,order:{id:_.id,invoice_number:P.invoiceNumber,paid_at:P.paidAt,total:M.total,currency:j,subtotal:typeof _.subtotal==`number`?_.subtotal:k?.subtotal??0,shipping_total:typeof _.shipping_total==`number`?_.shipping_total:k?.shipping_total??0,tax_total:A,tax_details:k}}}exports.syncStripeOrderFromSession=f;
@@ -1 +0,0 @@
1
- const e=require("../payment-config.cjs.js"),t=require("./client.cjs.js"),n=require("./order-sync.cjs.js");var r=async(r,i)=>{let a=await e.resolveStripeWebhookSecret();if(!a)return console.error(`Missing Stripe webhook secret (configure it in CMS or STRIPE_WEBHOOK_SECRET)`),{received:!1,error:`Server configuration error`};let o=await t.getStripeClient(),s;try{s=o.webhooks.constructEvent(i,r,a)}catch(e){return console.error(`Webhook signature verification failed: ${e.message}`),{received:!1,error:`Webhook Error: ${e.message}`}}switch(s.type){case`checkout.session.completed`:{let e=s.data.object;try{await n.syncStripeOrderFromSession(e)}catch(e){return console.error(`[Stripe Webhook Error] Failed to sync completed session:`,e),{received:!1,error:e.message||`Failed to sync Stripe session`}}break}default:console.log(`Unhandled event type ${s.type}`)}return{received:!0}};exports.handleStripeWebhook=r;
@@ -1 +0,0 @@
1
- const e=require("./currency.cjs.js"),t=require("./coupons.cjs.js"),n=require("./countries.cjs.js"),r=require("./states.cjs.js"),i=require("./inventory-settings.cjs.js");var a=`txcd_99999999`,o=`txcd_00000000`,s=`txcd_92010001`;function c(e){return e?a:o}async function l(n,r,i,a,o){if(!r.length)return[];let s=[...new Set(r.map(e=>e.product_id))],{data:c,error:l}=await n.from(`products`).select(`id, is_taxable`).in(`id`,s);if(l)throw Error(l.message);let u=new Map((c||[]).map(e=>[e.id,e]));return r.reduce((n,r)=>{let s=u.get(r.product_id);if(!s)return n;let c=e.resolveEffectivePriceForCurrency({prices:r.prices,salePrices:r.sale_prices,fallbackPrice:r.price,fallbackSalePrice:r.sale_price,saleStartAt:r.sale_start_at,saleEndAt:r.sale_end_at,scheduledPrice:r.scheduled_price,scheduledPrices:r.scheduled_prices,scheduledPriceAt:r.scheduled_price_at,currencyCode:i,currencies:a});return n.push({product_id:s.id,quantity:r.quantity,unit_amount:c.sale_price??c.price,discount_amount:o?.get(t.getCartLineCouponKey(r))??0,is_taxable:s.is_taxable??!0}),n},[])}async function u(e,t){let a=await i.getEcommerceInventorySettings(e),o=t.items.reduce((e,t)=>t.is_taxable?e+Math.max(0,t.unit_amount*t.quantity-(t.discount_amount??0)):e,0);if(!a.enableTaxes||o<=0)return{enabled:!1,mode:a.taxCalculationMode,amount:0,taxableSubtotal:o,lines:[]};if(a.taxCalculationMode===`automatic`)return{enabled:!0,mode:`automatic`,amount:0,taxableSubtotal:o,lines:[],isPendingExternalCalculation:!0};let s=n.normalizeCountryCode(t.destination?.country_code),c=r.normalizeSubdivisionCode(s,t.destination?.state)||null;if(!s)return{enabled:!0,mode:`manual`,amount:0,taxableSubtotal:o,lines:[]};let l=e.from(`tax_rates`).select(`id, country_code, state_code, tax_name, tax_rate, created_at, updated_at`).eq(`country_code`,s);l=c?l.or(`state_code.is.null,state_code.eq.${c}`):l.is(`state_code`,null);let{data:u,error:d}=await l;if(d)throw Error(d.message);let f=(u||[]).map(e=>({id:e.id,name:e.tax_name,rate:Number(e.tax_rate),amount:Math.round(o*Number(e.tax_rate)/100),country_code:e.country_code,state_code:e.state_code??null}));return{enabled:!0,mode:`manual`,amount:f.reduce((e,t)=>e+t.amount,0),taxableSubtotal:o,lines:f}}exports.STRIPE_TAX_CODE_NONTAXABLE=o,exports.STRIPE_TAX_CODE_SHIPPING=s,exports.STRIPE_TAX_CODE_TAXABLE_GOODS=a,exports.buildCheckoutTaxableItemsFromCart=l,exports.calculateCheckoutTaxes=u,exports.getStripeTaxCodeForProduct=c;
@@ -1 +0,0 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./cart-store.cjs.js");let t=require("react");var n=null;function r(){return e.useCartStore.persist}function i(){return r()?.hasHydrated?.()??!1}function a(){if(typeof window>`u`)return Promise.resolve();let e=r();return!e||e.hasHydrated()?Promise.resolve():(n||=Promise.resolve().then(()=>e.rehydrate()).finally(()=>{n=null}),n)}var o=n=>{let o=e.useCartStore(n),[s,c]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=r();if(i()){c(!0);return}let t=e?.onFinishHydration(()=>c(!0));return a(),()=>{t?.()}},[]),s?o:void 0},s=()=>{let[e,n]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=r()?.onFinishHydration(()=>n(!0));return n(i()),i()||a(),()=>{e?.()}},[]),e};exports.useCart=o,exports.useIsCartHydrated=s;
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./currency.cjs.js");function t(e){return!e||typeof e!=`object`||Array.isArray(e)?null:Object.entries(e).reduce((e,[t,n])=>(typeof n==`string`&&n.trim()&&(e[t]=n.trim()),e),{})}function n(e,t,n){return!n||!t?e:t[n]?.trim()||e}function r(e,t){return n(e.name,e.name_translations,t)}function i(e,t){return n(e.value,e.value_translations,t)}function a(e){return e?e.startsWith(`http`)?e:process.env.NEXT_PUBLIC_R2_BASE_URL?`${process.env.NEXT_PUBLIC_R2_BASE_URL}/${e}`:process.env.NEXT_PUBLIC_SUPABASE_URL?`${process.env.NEXT_PUBLIC_SUPABASE_URL}/storage/v1/object/public/media/${e}`:e:null}function o(e){return e.toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)}function s(e){return[...e].sort().join(`__`)}function c(e){return e.map(e=>e.term_value).join(` / `)}function l(e){return e.length===0?[]:e.reduce((e,t)=>e.flatMap(e=>t.map(t=>[...e,t])),[[]])}function u(t){let{baseSku:n,basePrice:r,basePrices:i={},baseSalePrice:a=null,baseSalePrices:u={},selectedAttributes:d,previousVariants:f=[]}=t;if(d.length===0||d.some(e=>e.terms.length===0))return[];let p=new Map(f.map(e=>[e.combination_key,e]));return l(d.map(e=>e.terms.map(t=>({attribute_id:e.attribute_id,attribute_name:e.attribute_name,term:t})))).map(t=>{let l=t.map(({attribute_id:e,attribute_name:t,term:n})=>({attribute_id:e,attribute_name:t,term_id:n.id,term_value:n.value,term_slug:n.slug})),d=l.map(e=>e.term_id),f=s(d),m=p.get(f),h=l.map(e=>(e.term_slug?e.term_slug:o(e.term_value)).toUpperCase()).filter(Boolean).join(`-`);return{id:m?.id,combination_key:f,sku:m?.sku||[n.trim(),h].filter(Boolean).join(`-`),upc:m?.upc??null,price:m?.price??r,prices:m?.prices??e.normalizePriceMap(i),sale_price:m?.sale_price??a,sale_prices:m?.sale_prices??e.normalizeSalePriceMap(u),sale_start_at:m?.sale_start_at??null,sale_end_at:m?.sale_end_at??null,stock_quantity:m?.stock_quantity??0,main_media_id:m?.main_media_id??null,main_image_url:m?.main_image_url??null,attribute_term_ids:d,selected_options:l,label:c(l)}})}function d(e){let t={};for(let n of e)for(let e of n.selected_options??[]){let n=new Set(t[e.attribute_id]??[]);n.add(e.term_id),t[e.attribute_id]=[...n]}return t}function f(e,t){let n=Object.values(t).filter(Boolean);return n.length===0?null:e.find(e=>e.attribute_term_ids.length===n.length&&n.every(t=>e.attribute_term_ids.includes(t)))??null}function p(e,t,n){let r=new Set;for(let i of e){if(!Object.entries(n).every(([e,n])=>!n||e===t||i.attribute_term_ids.includes(n)))continue;let e=i.selected_options.find(e=>e.attribute_id===t);e&&r.add(e.term_id)}return r}function m(e,t){let n=t.find(e=>e.stock_quantity>0)??t[0]??null;return n?n.selected_options.reduce((e,t)=>(e[t.attribute_id]=t.term_id,e),{}):e.reduce((e,t)=>{let n=t.terms[0];return n&&(e[t.id]=n.id),e},{})}function h(e,t,n,r,i){let a={[r]:i};for(let i of e){if(i.id===r)continue;let e=p(t,i.id,a),o=n[i.id];if(o&&e.has(o)){a[i.id]=o;continue}let s=i.terms.find(t=>e.has(t.id));s&&(a[i.id]=s.id)}return a}function g(e,t,n){let r={...n};for(let n of e){let e=p(t,n.id,r);if(e.size===0){delete r[n.id];continue}let i=r[n.id];if(i&&e.has(i))continue;let a=n.terms.find(t=>e.has(t.id));a&&(r[n.id]=a.id)}return r}function _(r=[],i){let o=new Map,l=r.map(r=>{let l=(r.variant_attribute_mapping||[]).map(e=>{let r=e.product_attribute_terms,a=r?.product_attributes;if(!r||!a)return null;let s=o.get(a.id)||{id:a.id,name:n(a.name,t(a.name_translations),i),slug:a.slug,name_translations:t(a.name_translations),terms:[],_termIds:new Set};return s._termIds.has(r.id)||(s.terms.push({id:r.id,attribute_id:r.attribute_id,value:n(r.value,t(r.value_translations),i),slug:r.slug,sort_order:r.sort_order??null,value_translations:t(r.value_translations)}),s._termIds.add(r.id)),o.set(a.id,s),{attribute_id:a.id,attribute_name:n(a.name,t(a.name_translations),i),term_id:r.id,term_value:n(r.value,t(r.value_translations),i),term_slug:r.slug}}).filter(e=>e!==null).sort((e,t)=>e.attribute_name.localeCompare(t.attribute_name)),u=l.map(e=>e.term_id);return{id:r.id,combination_key:s(u),sku:r.sku,upc:r.upc??null,price:r.price??0,prices:e.normalizePriceMap(r.prices),sale_price:r.sale_price??null,sale_prices:e.normalizeSalePriceMap(r.sale_prices),sale_start_at:r.sale_start_at??null,sale_end_at:r.sale_end_at??null,scheduled_price:r.scheduled_price??null,scheduled_prices:e.normalizePriceMap(r.scheduled_prices),scheduled_price_at:r.scheduled_price_at??null,stock_quantity:r.stock_quantity??0,main_media_id:r.main_media_id??null,image_url:a(r.media?.file_path??r.media?.object_key??null),attribute_term_ids:u,selected_options:l,label:c(l)}});return{attributes:[...o.values()].map(e=>({id:e.id,name:e.name,slug:e.slug,name_translations:e.name_translations,terms:[...e.terms].sort((e,t)=>{let n=e.sort_order??2**53-1,r=t.sort_order??2**53-1;return n===r?e.value.localeCompare(t.value):n-r})})).sort((e,t)=>e.name.localeCompare(t.name)),variants:l}}function v(t,n){if(!t.length)return null;let r=t.map(t=>e.isSaleWindowActive({saleStartAt:t.sale_start_at,saleEndAt:t.sale_end_at,now:n})&&typeof t.sale_price==`number`?t.sale_price:t.price);return{min:Math.min(...r),max:Math.max(...r)}}exports.applyVariantSelection=h,exports.buildCombinationKey=s,exports.buildVariantLabel=c,exports.chooseInitialVariantSelections=m,exports.extractSelectedTermsByAttribute=d,exports.findMatchingVariant=f,exports.generateVariantDrafts=u,exports.getAvailableTermIdsForAttribute=p,exports.getVariantEffectivePriceRange=v,exports.mapRawVariantRelations=_,exports.normalizeSelectionsToAvailableVariants=g,exports.resolveAttributeName=r,exports.resolveTermValue=i,exports.resolveTranslatedText=n;