@nextblock-cms/ecom 0.20.3 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/_virtual/_rolldown/runtime.cjs +1 -0
- package/index.cjs +1 -0
- package/index.es.js +38 -146
- package/lib/CurrencyProvider.cjs +1 -0
- package/lib/CurrencyProvider.d.ts +1 -1
- package/lib/CurrencyProvider.es.js +85 -95
- package/lib/PaymentReadinessProvider.cjs +1 -0
- package/lib/PaymentReadinessProvider.d.ts +1 -1
- package/lib/PaymentReadinessProvider.es.js +24 -27
- package/lib/cart-store.cjs +1 -0
- package/lib/cart-store.es.js +109 -121
- package/lib/components/AccountNavigationMenu.cjs +1 -0
- package/lib/components/AccountNavigationMenu.d.ts +1 -1
- package/lib/components/AccountNavigationMenu.es.js +36 -50
- package/lib/components/AddToCartButton.cjs +1 -0
- package/lib/components/AddToCartButton.d.ts +1 -1
- package/lib/components/AddToCartButton.es.js +94 -89
- package/lib/components/Cart.cjs +1 -0
- package/lib/components/Cart.d.ts +1 -1
- package/lib/components/Cart.es.js +261 -180
- package/lib/components/CartDrawer.cjs +1 -0
- package/lib/components/CartDrawer.d.ts +1 -1
- package/lib/components/CartDrawer.es.js +218 -148
- package/lib/components/CartIcon.cjs +1 -0
- package/lib/components/CartIcon.d.ts +1 -1
- package/lib/components/CartIcon.es.js +33 -35
- package/lib/components/Checkout.cjs +1 -0
- package/lib/components/Checkout.d.ts +1 -1
- package/lib/components/Checkout.es.js +1092 -1108
- package/lib/components/CouponForm.cjs +1 -0
- package/lib/components/CouponForm.d.ts +1 -1
- package/lib/components/CouponForm.es.js +136 -148
- package/lib/components/CurrencySwitcher.cjs +1 -0
- package/lib/components/CurrencySwitcher.d.ts +1 -1
- package/lib/components/CurrencySwitcher.es.js +22 -18
- package/lib/components/CustomerProfileForm.cjs +1 -0
- package/lib/components/CustomerProfileForm.es.js +454 -313
- package/lib/components/FeaturedProduct.cjs +1 -0
- package/lib/components/FeaturedProduct.d.ts +1 -1
- package/lib/components/FeaturedProduct.es.js +98 -83
- package/lib/components/FreemiusLicensePanel.cjs +1 -0
- package/lib/components/FreemiusLicensePanel.d.ts +1 -1
- package/lib/components/FreemiusLicensePanel.es.js +70 -65
- package/lib/components/InvoiceDocument.cjs +1 -0
- package/lib/components/InvoiceDocument.es.js +256 -192
- package/lib/components/InvoiceViewerShell.cjs +29 -0
- package/lib/components/InvoiceViewerShell.d.ts +1 -1
- package/lib/components/InvoiceViewerShell.es.js +75 -106
- package/lib/components/ProductCard.cjs +1 -0
- package/lib/components/ProductCard.d.ts +1 -1
- package/lib/components/ProductCard.es.js +186 -171
- package/lib/components/ProductDetailsLayout.cjs +1 -0
- package/lib/components/ProductDetailsLayout.es.js +405 -404
- package/lib/components/ProductGallery.cjs +1 -0
- package/lib/components/ProductGallery.d.ts +1 -1
- package/lib/components/ProductGallery.es.js +51 -54
- package/lib/components/ProductGrid.cjs +1 -0
- package/lib/components/ProductGrid.d.ts +1 -1
- package/lib/components/ProductGrid.es.js +23 -25
- package/lib/components/ShippingEstimator.cjs +1 -0
- package/lib/components/ShippingEstimator.d.ts +1 -1
- package/lib/components/ShippingEstimator.es.js +158 -153
- package/lib/components/ShortDescription.cjs +1 -0
- package/lib/components/ShortDescription.es.js +17 -17
- package/lib/components/SimpleTiptapRenderer.cjs +1 -0
- package/lib/components/SimpleTiptapRenderer.es.js +238 -211
- package/lib/components/SubscriptionSelector.cjs +1 -0
- package/lib/components/SubscriptionSelector.es.js +159 -154
- package/lib/countries.cjs +1 -0
- package/lib/countries.es.js +232 -75
- package/lib/coupon-server.cjs +1 -0
- package/lib/coupon-server.es.js +180 -224
- package/lib/coupons.cjs +1 -0
- package/lib/coupons.es.js +12 -14
- package/lib/currency-constants.cjs +1 -0
- package/lib/currency-constants.es.js +4 -4
- package/lib/currency-rest-client.cjs +1 -0
- package/lib/currency-rest-client.es.js +15 -22
- package/lib/currency-store.cjs +1 -0
- package/lib/currency-store.es.js +20 -27
- package/lib/currency-sync.cjs +1 -0
- package/lib/currency-sync.es.js +124 -170
- package/lib/currency.cjs +1 -0
- package/lib/currency.es.js +242 -310
- package/lib/customer-addresses.cjs +1 -0
- package/lib/customer-addresses.es.js +80 -109
- package/lib/customer-orders.cjs +1 -0
- package/lib/customer-orders.es.js +31 -43
- package/lib/customer.cjs +1 -0
- package/lib/customer.es.js +43 -52
- package/lib/export-helpers.cjs +1 -0
- package/lib/export-helpers.es.js +53 -52
- package/lib/factory.cjs +1 -0
- package/lib/factory.es.js +10 -7
- package/lib/freemius-coupons.cjs +1 -0
- package/lib/freemius-coupons.es.js +245 -262
- package/lib/freemius-license-claim.cjs +1 -0
- package/lib/freemius-license-claim.es.js +87 -71
- package/lib/freemius-license.cjs +1 -0
- package/lib/freemius-license.es.js +32 -39
- package/lib/freemius-order-sync.cjs +1 -0
- package/lib/freemius-order-sync.es.js +226 -290
- package/lib/freemius-trial-provision.cjs +1 -0
- package/lib/freemius-trial-provision.es.js +136 -130
- package/lib/inventory-settings.cjs +1 -0
- package/lib/inventory-settings.es.js +69 -77
- package/lib/invoice-server.cjs +33 -0
- package/lib/invoice-server.es.js +94 -141
- package/lib/invoice-ui.cjs +1 -0
- package/lib/invoice-ui.es.js +50 -66
- package/lib/invoice.cjs +1 -0
- package/lib/invoice.es.js +85 -94
- package/lib/order-inventory.cjs +61 -0
- package/lib/order-inventory.es.js +67 -79
- package/lib/order-tax-details.cjs +1 -0
- package/lib/order-tax-details.es.js +142 -153
- package/lib/pages/cms/coupons/CouponEditorForm.cjs +1 -0
- package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
- package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
- package/lib/pages/cms/coupons/CouponsPage.cjs +5 -0
- package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
- package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
- package/lib/pages/cms/coupons/CreateCouponDialog.cjs +1 -0
- package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
- package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
- package/lib/pages/cms/coupons/EditCouponPage.cjs +1 -0
- package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
- package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
- package/lib/pages/cms/coupons/ProductScopePicker.cjs +1 -0
- package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
- package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
- package/lib/pages/cms/coupons/actions.cjs +1 -0
- package/lib/pages/cms/coupons/actions.es.js +112 -115
- package/lib/pages/cms/coupons/index.cjs +1 -0
- package/lib/pages/cms/coupons/index.es.js +3 -0
- package/lib/pages/cms/coupons/product-options.cjs +1 -0
- package/lib/pages/cms/coupons/product-options.es.js +21 -23
- package/lib/pages/cms/orders/ExportReportsDialog.cjs +1 -0
- package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
- package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
- package/lib/pages/cms/orders/OrderDetailPage.cjs +1 -0
- package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
- package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
- package/lib/pages/cms/orders/OrderPrintButton.cjs +1 -0
- package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
- package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
- package/lib/pages/cms/orders/OrderStatusForm.cjs +1 -0
- package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
- package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
- package/lib/pages/cms/orders/OrdersPage.cjs +1 -0
- package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
- package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
- package/lib/pages/cms/orders/actions.cjs +7 -0
- package/lib/pages/cms/orders/actions.es.js +53 -69
- package/lib/pages/cms/orders/export-actions.cjs +1 -0
- package/lib/pages/cms/orders/export-actions.es.js +23 -26
- package/lib/pages/cms/orders/index.cjs +1 -0
- package/lib/pages/cms/orders/index.es.js +6 -0
- package/lib/pages/cms/orders/server-actions.cjs +1 -0
- package/lib/pages/cms/orders/server-actions.es.js +60 -51
- package/lib/pages/cms/payments/PaymentsClient.cjs +1 -0
- package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
- package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
- package/lib/pages/cms/payments/PaymentsPage.cjs +1 -0
- package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
- package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
- package/lib/pages/cms/payments/actions.cjs +1 -0
- package/lib/pages/cms/payments/actions.es.js +38 -48
- package/lib/pages/cms/payments/index.cjs +1 -0
- package/lib/pages/cms/payments/index.es.js +3 -0
- package/lib/pages/cms/payments/queries.cjs +1 -0
- package/lib/pages/cms/payments/queries.es.js +38 -48
- package/lib/pages/cms/products/ProductsPage.cjs +1 -0
- package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
- package/lib/pages/cms/products/ProductsPage.es.js +63 -66
- package/lib/pages/cms/products/[id]/edit/EditProductPage.cjs +1 -0
- package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
- package/lib/pages/cms/products/[id]/edit/EditProductPage.es.js +139 -0
- package/lib/pages/cms/products/actions.cjs +44 -0
- package/lib/pages/cms/products/actions.es.js +121 -162
- package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs +1 -0
- package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
- package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
- package/lib/pages/cms/products/attributes/components/AttributeManager.cjs +1 -0
- package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
- package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
- package/lib/pages/cms/products/categories/CategoryManagementPage.cjs +1 -0
- package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
- package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
- package/lib/pages/cms/products/categories/components/CategoryManager.cjs +1 -0
- package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
- package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs +1 -0
- package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
- package/lib/pages/cms/products/components/CurrencyPriceFields.cjs +1 -0
- package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
- package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
- package/lib/pages/cms/products/components/DeleteProductButton.cjs +1 -0
- package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
- package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
- package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs +1 -0
- package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
- package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
- package/lib/pages/cms/products/components/ProductCategorySelector.cjs +1 -0
- package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
- package/lib/pages/cms/products/components/ProductForm.cjs +1 -0
- package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
- package/lib/pages/cms/products/components/ProductMediaManager.cjs +1 -0
- package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
- package/lib/pages/cms/products/components/ProductsBulkTable.cjs +1 -0
- package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
- package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
- package/lib/pages/cms/products/components/SaleScheduleFields.cjs +1 -0
- package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
- package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
- package/lib/pages/cms/products/components/SyncFreemiusButton.cjs +1 -0
- package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
- package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
- package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs +5 -0
- package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
- package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
- package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
- package/lib/pages/cms/products/components/VariationsEditor.cjs +1 -0
- package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
- package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
- package/lib/pages/cms/products/index.cjs +1 -0
- package/lib/pages/cms/products/index.es.js +8 -0
- package/lib/pages/cms/products/inventory/InventoryPage.cjs +1 -0
- package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
- package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
- package/lib/pages/cms/products/inventory/InventoryTableClient.cjs +2 -0
- package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
- package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
- package/lib/pages/cms/products/inventory/actions.cjs +3 -0
- package/lib/pages/cms/products/inventory/actions.es.js +83 -91
- package/lib/pages/cms/products/new/NewProductPage.cjs +1 -0
- package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
- package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
- package/lib/pages/cms/products/product-price-sync.cjs +1 -0
- package/lib/pages/cms/products/product-price-sync.es.js +74 -89
- package/lib/pages/cms/products/server-actions.cjs +1 -0
- package/lib/pages/cms/products/server-actions.es.js +250 -233
- package/lib/pages/cms/shipping/ShippingPage.cjs +5 -0
- package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
- package/lib/pages/cms/shipping/components/RateForm.cjs +1 -0
- package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
- package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
- package/lib/pages/cms/shipping/components/ZoneForm.cjs +1 -0
- package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
- package/lib/pages/cms/shipping/index.cjs +1 -0
- package/lib/pages/cms/shipping/index.es.js +3 -0
- package/lib/pages/cms/shipping/server-actions.cjs +1 -0
- package/lib/pages/cms/shipping/server-actions.es.js +131 -149
- package/lib/pages/cms/taxes/TaxesPage.cjs +1 -0
- package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
- package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
- package/lib/pages/cms/taxes/actions.cjs +1 -0
- package/lib/pages/cms/taxes/actions.es.js +41 -53
- package/lib/pages/cms/taxes/components/TaxRateForm.cjs +1 -0
- package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
- package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
- package/lib/pages/cms/taxes/index.cjs +1 -0
- package/lib/pages/cms/taxes/index.es.js +3 -0
- package/lib/payment-config.cjs +1 -0
- package/lib/payment-config.es.js +110 -126
- package/lib/product-actions.cjs +238 -0
- package/lib/product-actions.es.js +289 -544
- package/lib/product-context.cjs +1 -0
- package/lib/product-context.es.js +13 -15
- package/lib/product-schema.cjs +1 -0
- package/lib/product-schema.es.js +99 -134
- package/lib/providers/freemius.cjs +1 -0
- package/lib/providers/freemius.es.js +446 -530
- package/lib/providers/stripe.cjs +1 -0
- package/lib/providers/stripe.es.js +417 -477
- package/lib/server-actions/coupon-actions.cjs +1 -0
- package/lib/server-actions/coupon-actions.es.js +22 -22
- package/lib/server-actions/customer-actions.cjs +1 -0
- package/lib/server-actions/customer-actions.es.js +26 -28
- package/lib/server-actions/product-actions.cjs +1 -0
- package/lib/server-actions/product-actions.es.js +9 -15
- package/lib/server-actions/shipping-actions.cjs +1 -0
- package/lib/server-actions/shipping-actions.es.js +27 -24
- package/lib/server-actions/tax-actions.cjs +1 -0
- package/lib/server-actions/tax-actions.es.js +33 -39
- package/lib/shared-inventory.cjs +15 -0
- package/lib/shared-inventory.es.js +111 -160
- package/lib/shipping/resolver.cjs +7 -0
- package/lib/shipping/resolver.es.js +44 -61
- package/lib/shipping-rate-currency.cjs +1 -0
- package/lib/shipping-rate-currency.es.js +52 -67
- package/lib/states.cjs +1 -0
- package/lib/states.es.js +333 -154
- package/lib/stripe/checkout.cjs +1 -0
- package/lib/stripe/checkout.es.js +125 -181
- package/lib/stripe/client.cjs +1 -0
- package/lib/stripe/client.es.js +14 -19
- package/lib/stripe/order-sync.cjs +1 -0
- package/lib/stripe/order-sync.es.js +106 -126
- package/lib/stripe/webhooks.cjs +1 -0
- package/lib/stripe/webhooks.es.js +37 -31
- package/lib/tax-calculation.cjs +1 -0
- package/lib/tax-calculation.es.js +84 -98
- package/lib/trials.cjs +1 -0
- package/lib/trials.es.js +24 -30
- package/lib/types.cjs +1 -0
- package/lib/types.es.js +21 -27
- package/lib/use-cart.cjs +1 -0
- package/lib/use-cart.es.js +38 -40
- package/lib/use-price-formatter.cjs +1 -0
- package/lib/use-price-formatter.es.js +10 -11
- package/lib/variation-utils.cjs +1 -0
- package/lib/variation-utils.es.js +199 -261
- package/lib/zod-config.cjs +1 -0
- package/lib/zod-config.es.js +5 -6
- package/package.json +22 -21
- package/server.cjs +1 -0
- package/server.es.js +56 -211
- package/index.cjs.js +0 -1
- package/lib/CurrencyProvider.cjs.js +0 -1
- package/lib/PaymentReadinessProvider.cjs.js +0 -1
- package/lib/cart-store.cjs.js +0 -1
- package/lib/components/AccountNavigationMenu.cjs.js +0 -1
- package/lib/components/AddToCartButton.cjs.js +0 -1
- package/lib/components/Cart.cjs.js +0 -1
- package/lib/components/CartDrawer.cjs.js +0 -1
- package/lib/components/CartIcon.cjs.js +0 -1
- package/lib/components/Checkout.cjs.js +0 -1
- package/lib/components/CouponForm.cjs.js +0 -1
- package/lib/components/CurrencySwitcher.cjs.js +0 -1
- package/lib/components/CustomerProfileForm.cjs.js +0 -1
- package/lib/components/FeaturedProduct.cjs.js +0 -1
- package/lib/components/FreemiusLicensePanel.cjs.js +0 -1
- package/lib/components/InvoiceDocument.cjs.js +0 -1
- package/lib/components/InvoiceViewerShell.cjs.js +0 -29
- package/lib/components/ProductCard.cjs.js +0 -1
- package/lib/components/ProductDetailsLayout.cjs.js +0 -1
- package/lib/components/ProductGallery.cjs.js +0 -1
- package/lib/components/ProductGrid.cjs.js +0 -1
- package/lib/components/ShippingEstimator.cjs.js +0 -1
- package/lib/components/ShortDescription.cjs.js +0 -1
- package/lib/components/SimpleTiptapRenderer.cjs.js +0 -1
- package/lib/components/SubscriptionSelector.cjs.js +0 -1
- package/lib/countries.cjs.js +0 -1
- package/lib/coupon-server.cjs.js +0 -1
- package/lib/coupons.cjs.js +0 -1
- package/lib/currency-constants.cjs.js +0 -1
- package/lib/currency-rest-client.cjs.js +0 -1
- package/lib/currency-store.cjs.js +0 -1
- package/lib/currency-sync.cjs.js +0 -1
- package/lib/currency.cjs.js +0 -1
- package/lib/customer-addresses.cjs.js +0 -1
- package/lib/customer-orders.cjs.js +0 -1
- package/lib/customer.cjs.js +0 -1
- package/lib/export-helpers.cjs.js +0 -1
- package/lib/factory.cjs.js +0 -1
- package/lib/freemius-coupons.cjs.js +0 -1
- package/lib/freemius-license-claim.cjs.js +0 -1
- package/lib/freemius-license.cjs.js +0 -1
- package/lib/freemius-order-sync.cjs.js +0 -1
- package/lib/freemius-trial-provision.cjs.js +0 -1
- package/lib/inventory-settings.cjs.js +0 -1
- package/lib/invoice-server.cjs.js +0 -33
- package/lib/invoice-ui.cjs.js +0 -1
- package/lib/invoice.cjs.js +0 -1
- package/lib/order-inventory.cjs.js +0 -61
- package/lib/order-tax-details.cjs.js +0 -1
- package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +0 -1
- package/lib/pages/cms/coupons/CouponsPage.cjs.js +0 -5
- package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +0 -1
- package/lib/pages/cms/coupons/EditCouponPage.cjs.js +0 -1
- package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +0 -1
- package/lib/pages/cms/coupons/actions.cjs.js +0 -1
- package/lib/pages/cms/coupons/product-options.cjs.js +0 -1
- package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +0 -1
- package/lib/pages/cms/orders/OrderDetailPage.cjs.js +0 -1
- package/lib/pages/cms/orders/OrderPrintButton.cjs.js +0 -1
- package/lib/pages/cms/orders/OrderStatusForm.cjs.js +0 -1
- package/lib/pages/cms/orders/OrdersPage.cjs.js +0 -1
- package/lib/pages/cms/orders/actions.cjs.js +0 -7
- package/lib/pages/cms/orders/export-actions.cjs.js +0 -1
- package/lib/pages/cms/orders/server-actions.cjs.js +0 -1
- package/lib/pages/cms/payments/PaymentsClient.cjs.js +0 -1
- package/lib/pages/cms/payments/PaymentsPage.cjs.js +0 -1
- package/lib/pages/cms/payments/actions.cjs.js +0 -1
- package/lib/pages/cms/payments/queries.cjs.js +0 -1
- package/lib/pages/cms/products/ProductsPage.cjs.js +0 -1
- package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +0 -1
- package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +0 -156
- package/lib/pages/cms/products/actions.cjs.js +0 -44
- package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +0 -1
- package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +0 -1
- package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +0 -1
- package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +0 -1
- package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +0 -1
- package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +0 -1
- package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +0 -1
- package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +0 -1
- package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +0 -1
- package/lib/pages/cms/products/components/ProductForm.cjs.js +0 -1
- package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +0 -1
- package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +0 -1
- package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +0 -1
- package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +0 -1
- package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +0 -5
- package/lib/pages/cms/products/components/VariationsEditor.cjs.js +0 -1
- package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +0 -1
- package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +0 -2
- package/lib/pages/cms/products/inventory/actions.cjs.js +0 -3
- package/lib/pages/cms/products/new/NewProductPage.cjs.js +0 -1
- package/lib/pages/cms/products/product-price-sync.cjs.js +0 -1
- package/lib/pages/cms/products/server-actions.cjs.js +0 -1
- package/lib/pages/cms/shipping/ShippingPage.cjs.js +0 -5
- package/lib/pages/cms/shipping/components/RateForm.cjs.js +0 -1
- package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +0 -1
- package/lib/pages/cms/shipping/server-actions.cjs.js +0 -1
- package/lib/pages/cms/taxes/TaxesPage.cjs.js +0 -1
- package/lib/pages/cms/taxes/actions.cjs.js +0 -1
- package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +0 -1
- package/lib/payment-config.cjs.js +0 -1
- package/lib/product-actions.cjs.js +0 -238
- package/lib/product-context.cjs.js +0 -1
- package/lib/product-schema.cjs.js +0 -1
- package/lib/providers/freemius.cjs.js +0 -5
- package/lib/providers/stripe.cjs.js +0 -1
- package/lib/server-actions/coupon-actions.cjs.js +0 -1
- package/lib/server-actions/customer-actions.cjs.js +0 -1
- package/lib/server-actions/product-actions.cjs.js +0 -1
- package/lib/server-actions/shipping-actions.cjs.js +0 -1
- package/lib/server-actions/tax-actions.cjs.js +0 -1
- package/lib/shared-inventory.cjs.js +0 -15
- package/lib/shipping/resolver.cjs.js +0 -7
- package/lib/shipping-rate-currency.cjs.js +0 -1
- package/lib/states.cjs.js +0 -1
- package/lib/stripe/checkout.cjs.js +0 -1
- package/lib/stripe/client.cjs.js +0 -1
- package/lib/stripe/order-sync.cjs.js +0 -1
- package/lib/stripe/webhooks.cjs.js +0 -1
- package/lib/tax-calculation.cjs.js +0 -1
- package/lib/trials.cjs.js +0 -1
- package/lib/types.cjs.js +0 -1
- package/lib/use-cart.cjs.js +0 -1
- package/lib/use-price-formatter.cjs.js +0 -1
- package/lib/variation-utils.cjs.js +0 -1
- package/lib/zod-config.cjs.js +0 -1
- package/server.cjs.js +0 -1
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),f=require("next/link"),g=require("lucide-react"),n=require("@nextblock-cms/ui/button"),y=require("./InvoiceDocument.cjs.js");function w({invoice:i,labels:c,locale:x,title:m,description:l,printLabel:u,headerVisual:s,action:t,loading:d=!1,loadingMessage:p,error:r,onRetry:a,retryLabel:o,emptyMessage:b,className:h="",showHeader:j=!0,beforeInvoice:v}){return e.jsxs(e.Fragment,{children:[e.jsx("style",{children:`
|
|
2
|
-
@media print {
|
|
3
|
-
@page {
|
|
4
|
-
size: portrait;
|
|
5
|
-
margin: 12mm;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
body {
|
|
9
|
-
background: white !important;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
body * {
|
|
13
|
-
visibility: hidden;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
[data-print-invoice-root],
|
|
17
|
-
[data-print-invoice-root] * {
|
|
18
|
-
visibility: visible;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
[data-print-invoice-root] {
|
|
22
|
-
position: absolute;
|
|
23
|
-
inset: 0;
|
|
24
|
-
width: 100%;
|
|
25
|
-
margin: 0;
|
|
26
|
-
padding: 0;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
`}),e.jsxs("div",{className:`mx-auto max-w-6xl px-4 py-10 md:px-6 print:max-w-none print:px-0 print:py-0 ${h}`,children:[j?e.jsxs("div",{className:"mb-6 flex flex-col gap-4 md:flex-row md:items-center md:justify-between print:hidden",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[s?e.jsx("div",{className:"shrink-0",children:s}):null,e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:m}),l?e.jsx("p",{className:"text-sm text-muted-foreground",children:l}):null]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs(n.Button,{type:"button",variant:"outline",onClick:()=>window.print(),disabled:!i,children:[e.jsx(g.Printer,{className:"mr-2 h-4 w-4"}),u]}),t?e.jsx(n.Button,{asChild:!0,variant:t.variant||"default",children:e.jsx(f,{href:t.href,children:t.label})}):null]})]}):null,d?e.jsx("div",{role:"status",className:"mb-6 flex items-center justify-center gap-3 rounded-2xl border bg-background px-5 py-4 text-sm text-muted-foreground print:hidden",children:p}):null,r?e.jsxs("div",{role:"alert",className:"mb-6 flex flex-wrap items-center justify-between gap-3 rounded-2xl border border-amber-200 bg-amber-50 px-5 py-4 text-sm text-amber-800 print:hidden dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200",children:[e.jsx("span",{children:r}),a&&o?e.jsx(n.Button,{type:"button",size:"sm",variant:"outline",onClick:a,children:o}):null]}):null,v,i?e.jsx("div",{"data-print-invoice-root":!0,children:e.jsx(y.InvoiceDocument,{data:i,labels:c,locale:x})}):!d&&!r?e.jsx("div",{className:"rounded-2xl border bg-background px-6 py-12 text-center text-muted-foreground print:hidden",children:b}):null]})]})}exports.InvoiceViewerShell=w;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),q=require("./AddToCartButton.cjs.js"),c=require("@nextblock-cms/utils"),A=require("../use-price-formatter.cjs.js"),j=require("next/link"),R=require("../CurrencyProvider.cjs.js"),m=require("../currency.cjs.js"),T=require("../trials.cjs.js"),M=require("../variation-utils.cjs.js"),L=({product:e,className:y,priority:N=!1})=>{const i=A.usePriceFormatter(),{activeCurrencyCode:a,currencies:n}=R.useCurrency(),t=m.resolvePriceRangeForCurrency({entries:e.variants?.length?e.variants:e.product_variants?.length?e.product_variants:[],currencyCode:a,currencies:n}),h=!!(e.has_variants&&t),o=m.resolveEffectivePriceForCurrency({prices:e.prices,salePrices:e.sale_prices,fallbackPrice:e.price,fallbackSalePrice:e.sale_price,saleStartAt:e.sale_start_at,saleEndAt:e.sale_end_at,scheduledPrice:e.scheduled_price,scheduledPrices:e.scheduled_prices,scheduledPriceAt:e.scheduled_price_at,currencyCode:a,currencies:n}),P=h&&t?t.min===t.max?i(t.min,a):`${i(t.min,a)} - ${i(t.max,a)}`:i(o.sale_price??o.price,a),w=e.variants?.length?e.variants:e.product_variants?.length?e.product_variants:[],C=h?w.some(s=>m.resolveEffectivePriceForCurrency({prices:s.prices,salePrices:s.sale_prices,fallbackPrice:s.price,fallbackSalePrice:s.sale_price,saleStartAt:s.sale_start_at,saleEndAt:s.sale_end_at,scheduledPrice:s.scheduled_price,scheduledPrices:s.scheduled_prices,scheduledPriceAt:s.scheduled_price_at,currencyCode:a,currencies:n}).sale_price!=null):o.sale_price!=null,{t:l,lang:S}=c.useTranslations(),f=l("ecommerce.on_sale"),F=f==="ecommerce.on_sale"?"On Sale":f,g=T.getTrialSummary(e,l),d=e.freemius_plans?.[0]?.freemius_pricing?.[0],x=n.find(s=>s.is_default)?.code||"USD",p=d?.override_monthly_price??d?.api_monthly_price,v=d?.override_annual_price??d?.api_annual_price,u=typeof p=="number"?m.resolvePriceForCurrency({prices:{[x]:c.majorUnitAmountToMinor(p,x)},currencyCode:a,currencies:n}):null,_=typeof v=="number"?m.resolvePriceForCurrency({prices:{[x]:c.majorUnitAmountToMinor(v,x)},currencyCode:a,currencies:n}):null;return r.jsxs("div",{className:c.cn("group relative flex flex-col overflow-hidden rounded-lg border bg-card text-card-foreground shadow-sm transition-shadow hover:shadow-md",y),children:[r.jsxs(j,{href:`/product/${e.slug}`,tabIndex:-1,"aria-hidden":"true",className:"relative aspect-square overflow-hidden bg-muted",children:[C&&r.jsx("span",{className:"absolute left-3 top-3 z-10 rounded-full bg-destructive px-2.5 py-1 text-[10px] font-bold uppercase tracking-wider text-destructive-foreground shadow-sm",children:F}),e.image_url?r.jsx("img",{src:e.image_url,alt:"",width:600,height:600,loading:N?"eager":"lazy",decoding:"async",className:"h-full w-full object-cover object-center transition-transform duration-300 group-hover:scale-105"}):r.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:l("ecommerce.no_image")==="ecommerce.no_image"?"No image":l("ecommerce.no_image")})]}),r.jsxs("div",{className:"flex flex-1 flex-col p-4",children:[e.categories&&e.categories.length>0&&r.jsx("div",{className:"text-[10px] font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400 mb-1",children:e.categories.map(s=>M.resolveTranslatedText(s.name,s.name_translations,S)).join(" • ")}),r.jsx(j,{href:`/product/${e.slug}`,className:"mb-2",children:r.jsx("h3",{className:"line-clamp-1 text-lg font-medium text-foreground group-hover:underline",children:e.title})}),r.jsx("div",{className:"flex items-center gap-1 mb-2 mt-0.5 text-xs text-muted-foreground min-h-[1.25rem] select-none",children:e.total_reviews&&e.total_reviews>0?r.jsxs(r.Fragment,{children:[r.jsx("div",{role:"img","aria-label":l("ecommerce.rating_out_of_5",{rating:Number(e.average_rating??0).toFixed(1)})==="ecommerce.rating_out_of_5"?`Rated ${Number(e.average_rating??0).toFixed(1)} out of 5`:l("ecommerce.rating_out_of_5",{rating:Number(e.average_rating??0).toFixed(1)}),className:"flex items-center text-amber-500 mr-1",children:Array.from({length:5}).map((s,b)=>{const k=e.average_rating??0;return r.jsx("svg",{className:c.cn("h-3.5 w-3.5 fill-current",b<Math.round(k)?"text-amber-500":"text-slate-200 dark:text-slate-800"),viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",children:r.jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"})},b)})}),r.jsx("span",{className:"font-semibold text-slate-700 dark:text-slate-300",children:Number(e.average_rating).toFixed(1)}),r.jsxs("span",{className:"ml-0.5",children:["(",e.total_reviews,")"]})]}):r.jsx("span",{className:"text-slate-400 dark:text-slate-600",children:l("reviews.no_reviews")})}),r.jsx("div",{className:"mb-4",children:e.product_type==="digital"&&(u||_)?r.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1",children:[u&&r.jsxs("div",{className:"flex items-baseline gap-0.5",children:[r.jsx("span",{className:"text-xl font-bold text-primary",children:i(u.price,a)}),r.jsxs("span",{className:"text-xs font-medium text-muted-foreground lowercase",children:["/ ",l("ecommerce.month")]})]}),_&&r.jsxs("div",{className:"flex items-baseline gap-0.5",children:[r.jsx("span",{className:c.cn("font-bold text-primary",u?"text-lg":"text-xl"),children:i(_.price,a)}),r.jsxs("span",{className:"text-xs font-medium text-muted-foreground lowercase",children:["/ ",l("ecommerce.year")]})]})]}):r.jsxs("div",{className:"flex items-baseline gap-2",children:[r.jsx("span",{className:"text-xl font-bold text-primary",children:P}),!h&&o.sale_price&&r.jsxs("span",{className:"text-sm text-muted-foreground tabular-nums",children:[r.jsxs("span",{className:"sr-only",children:[l("ecommerce.regular_price")==="ecommerce.regular_price"?"Regular price":l("ecommerce.regular_price")," "]}),r.jsx("s",{children:i(o.price,a)})]})]})}),g&&r.jsxs("div",{className:"mb-4 rounded-md border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs text-emerald-900",children:[r.jsx("div",{className:"font-semibold",children:g.label}),r.jsx("div",{className:"text-emerald-700",children:g.paymentRequirementLabel})]}),r.jsx("div",{className:"mt-auto",children:r.jsx(q.AddToCartButton,{product:{...e,price:e.price,prices:e.prices,sale_price:e.sale_price,sale_prices:e.sale_prices},className:"w-full"})})]})]})};exports.ProductCard=L;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),I=require("lucide-react"),A=require("@nextblock-cms/ui/badge"),ee=require("@nextblock-cms/ui/button"),te=require("@nextblock-cms/ui/label"),se=require("@nextblock-cms/ui/separator"),F=require("@nextblock-cms/utils"),re=require("../use-price-formatter.cjs.js"),ae=require("../product-context.cjs.js"),ie=require("./ProductGallery.cjs.js"),ce=require("./AddToCartButton.cjs.js"),ne=require("./SubscriptionSelector.cjs.js"),le=require("./SimpleTiptapRenderer.cjs.js"),oe=require("./ShortDescription.cjs.js"),v=require("../variation-utils.cjs.js"),de=require("../CurrencyProvider.cjs.js"),$=require("../currency.cjs.js"),ue=require("../types.cjs.js"),me=require("../trials.cjs.js");function V(o,_,P,E){const C={kind:"product-field",field:_,input:P,label:E},t=typeof window<"u"?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:"")||"http://localhost:3000";let g=(typeof window<"u"?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:"")||"http://localhost:3000").replace(/\/+$/,"");try{(g.startsWith("http://")||g.startsWith("https://"))&&(g=new URL(g).hostname)}catch{}const N=process.env.NEXTBLOCK_VERCEL_PROJECT_ID||process.env.VERCEL_PROJECT_ID,d=process.env.NEXTBLOCK_VERCEL_WORKSPACE_ID||process.env.VERCEL_ORG_ID,b={origin:g,editUrl:`${t}/cms/products/${o.id}/edit`,data:{parentType:"product",parentId:o.id,slug:o.slug,languageId:o.language_id,draftId:null,target:C}};return N&&(b.projectId=N),d&&(b.workspaceId=d),{"data-vercel-edit-info":JSON.stringify(b),"data-vercel-edit-target":JSON.stringify(C),"data-nextblock-visual-edit":`product:${_}`}}const pe=({visualEditingEnabled:o=!1,descriptionNode:_,reviewsNode:P,canPurchase:E=!0,purchaseFallbackNode:C})=>{const t=ae.useProduct(),{t:c,lang:g}=F.useTranslations(),N=re.usePriceFormatter(),{activeCurrencyCode:d,currencies:b}=de.useCurrency(),J=o?V(t,"title","plain-text","Product title"):void 0,G=o?V(t,"short_description","plain-text","Short description"):void 0,K=o?V(t,"description_json","tiptap","Product description"):void 0,l=(r,n,m)=>{const p=c(r,m);return p===r?n:p},L=t.images&&t.images.length>0?t.images:t.image_url?[{url:t.image_url,alt:t.title}]:[],j=t.custom_props?.provider==="freemius"||ue.isDigitalProduct(t),O=me.getTrialSummary(t,c),i=!j&&!!(t.has_variants&&t.attributes?.length&&t.variants?.length),f=t.attributes||[],u=t.variants||[],[w,R]=x.useState(()=>v.chooseInitialVariantSelections(f,u)),[U,T]=x.useState(1);x.useEffect(()=>{T(1)},[t.id]),x.useEffect(()=>{i&&R(v.chooseInitialVariantSelections(f,u))},[f,i,t.id,u]);const y=x.useMemo(()=>i?v.normalizeSelectionsToAvailableVariants(f,u,w):w,[f,i,w,u]);x.useEffect(()=>{JSON.stringify(y)!==JSON.stringify(w)&&R(y)},[y,w]);const s=x.useMemo(()=>i?v.findMatchingVariant(u,y):null,[i,y,u]),B=$.resolveEffectivePriceForCurrency({prices:t.prices,salePrices:t.sale_prices,fallbackPrice:t.price,fallbackSalePrice:t.sale_price,saleStartAt:t.sale_start_at,saleEndAt:t.sale_end_at,scheduledPrice:t.scheduled_price,scheduledPrices:t.scheduled_prices,scheduledPriceAt:t.scheduled_price_at,currencyCode:d,currencies:b}),D=i&&s?$.resolveEffectivePriceForCurrency({prices:s.prices,salePrices:s.sale_prices,fallbackPrice:s.price,fallbackSalePrice:s.sale_price,saleStartAt:s.sale_start_at,saleEndAt:s.sale_end_at,scheduledPrice:s.scheduled_price,scheduledPrices:s.scheduled_prices,scheduledPriceAt:s.scheduled_price_at,currencyCode:d,currencies:b}):null,k=D?.price??B.price,S=D?.sale_price??B.sale_price,a=i?s?.stock_quantity??0:t.stock??null,q=a===null||a>0,h=a===null?U:Math.max(1,Math.min(U,Math.max(a,1))),X=x.useMemo(()=>{if(!s?.image_url)return L;const r={url:s.image_url,alt:`${t.title} ${s.label}`},n=L.filter(m=>m.url!==s.image_url);return[r,...n]},[L,t.title,s]),z=typeof S=="number"&&k>0?Math.round((k-S)/k*100):0,Q=i&&s?{...t,sku:s.sku,price:s.price,prices:s.prices,sale_price:typeof s.sale_price=="number"?s.sale_price:null,sale_prices:s.sale_prices,sale_start_at:s.sale_start_at,sale_end_at:s.sale_end_at,scheduled_price:s.scheduled_price,scheduled_prices:s.scheduled_prices,scheduled_price_at:s.scheduled_price_at,image_url:s.image_url||t.image_url,stock:s.stock_quantity,variant_id:s.id,variant_label:s.label,selected_options:s.selected_options,currency_code:d}:{...t,currency_code:d},W=(r,n)=>{R(m=>v.applyVariantSelection(f,u,m,r,n))},H=a===null?l("ecommerce.in_stock_untracked","In stock"):l("ecommerce.in_stock",`${a} in stock`,{count:String(a)}),M=l("ecommerce.out_of_stock","Out of stock"),Y=l("ecommerce.select_options","Select Options"),Z=l("ecommerce.variant_selection_required","Select one term from every dropdown to resolve a variation.");return e.jsxs("div",{className:"w-full animate-in fade-in slide-in-from-bottom-4 duration-700 ease-out",children:[e.jsx("div",{className:"container mx-auto px-4 md:px-6 py-12",children:e.jsxs("div",{className:"grid gap-12 lg:grid-cols-[2fr_3fr] items-start",children:[e.jsx("div",{className:"w-full max-w-2xl mx-auto lg:max-w-none",children:e.jsx(ie.ProductGallery,{images:X,className:"w-full"})}),e.jsxs("div",{className:"flex flex-col gap-4 pb-2 max-w-xl mx-auto lg:mx-0 lg:max-w-none",children:[e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("h1",{className:"text-3xl sm:text-4xl lg:text-5xl font-extrabold tracking-tight text-foreground leading-[1.1] lg:mt-0",...J,children:t.title}),e.jsx("div",{className:"flex items-center gap-2 mt-2",children:e.jsxs("a",{href:"#reviews-section",className:"flex items-center gap-1.5 group hover:opacity-85 transition-opacity",children:[e.jsx("div",{className:"flex items-center text-amber-500",children:Array.from({length:5}).map((r,n)=>e.jsx("svg",{className:F.cn("h-4 w-4 fill-current",n<Math.round(t.average_rating||0)?"text-amber-500":"text-slate-300 dark:text-slate-700"),viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"})},n))}),t.total_reviews&&t.total_reviews>0?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-300",children:t.average_rating?.toFixed(1)}),e.jsxs("span",{className:"text-sm text-muted-foreground underline decoration-dotted group-hover:text-primary",children:["(",t.total_reviews===1?c("reviews.review_count_one",{count:t.total_reviews}):c("reviews.review_count_other",{count:t.total_reviews}),")"]})]}):e.jsx("span",{className:"text-xs text-muted-foreground group-hover:text-primary underline decoration-dotted",children:c("reviews.be_the_first")})]})}),t.categories&&t.categories.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-1.5 text-xs font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400",children:t.categories.map((r,n)=>{const m=v.resolveTranslatedText(r.name,r.name_translations,g);return e.jsxs(x.Fragment,{children:[n>0&&e.jsx("span",{className:"text-muted-foreground/30",children:"•"}),e.jsx("span",{children:m})]},r.id)})}),e.jsx("div",{className:"prose prose-neutral dark:prose-invert max-w-none text-muted-foreground leading-relaxed text-left",...G,children:t.short_description?e.jsx(oe.ShortDescription,{value:t.short_description,className:"text-lg mb-4 leading-relaxed"}):o?e.jsx("p",{className:"text-lg mb-4 italic text-muted-foreground",children:"Add a short product description."}):null}),e.jsxs("div",{className:"flex items-center gap-3",children:[typeof S=="number"&&e.jsx(A.Badge,{variant:"destructive",className:"px-2.5 py-1 text-xs font-bold uppercase tracking-wide animate-pulse shadow-sm",children:c("ecommerce.sale_badge",{percent:String(z)})}),!j&&a!==null&&a>0&&a<10&&e.jsx(A.Badge,{variant:"outline",className:"text-amber-600 border-amber-200 bg-amber-50",children:c("ecommerce.low_stock",{count:String(a)})}),O&&e.jsx(A.Badge,{variant:"secondary",className:"border border-emerald-200 bg-emerald-50 text-emerald-800",children:O.label})]})]})}),e.jsxs("div",{className:"p-5 rounded-2xl bg-card border border-border/80 shadow-md space-y-4",children:[E?j?e.jsx(ne.SubscriptionSelector,{product:t}):e.jsxs("div",{className:"space-y-3.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-[10px] font-bold text-muted-foreground uppercase tracking-widest",children:l("ecommerce.price","Price")}),e.jsxs("div",{className:"flex items-baseline gap-2.5",children:[e.jsx("span",{className:"text-3xl font-extrabold text-foreground",children:N(S??k,d)}),typeof S=="number"&&e.jsx("span",{className:"text-lg text-muted-foreground line-through decoration-destructive/20 decoration-1",children:N(k,d)})]})]}),!j&&(s||!i)&&e.jsxs("div",{className:"text-right space-y-1",children:[e.jsxs("span",{className:"text-[10px] font-bold text-muted-foreground uppercase tracking-widest block",children:[!i&&t.sku&&e.jsxs("span",{className:"mr-2 font-normal lowercase normal-case text-muted-foreground/70",children:[l("ecommerce.sku","SKU"),": ",t.sku]}),l("ecommerce.status","Status")]}),e.jsx("div",{className:q?"text-emerald-600 dark:text-emerald-400 font-semibold text-sm":"text-destructive font-semibold text-sm",children:q?H:M})]})]}),i&&e.jsx("div",{className:"space-y-3",children:e.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:f.map((r,n)=>{const m=v.getAvailableTermIdsForAttribute(u,r.id,{});return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(te.Label,{htmlFor:`attribute-${r.id}`,className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:r.name}),n===0&&s?.sku&&e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono",children:s.sku})]}),e.jsx("select",{id:`attribute-${r.id}`,className:"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",value:y[r.id]||"",onChange:p=>W(r.id,p.target.value),children:r.terms.map(p=>e.jsx("option",{value:p.id,disabled:!m.has(p.id),children:p.value},p.id))})]},r.id)})})}),i&&!s&&e.jsx("p",{className:"text-xs text-muted-foreground italic pt-1",children:Z}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[!j&&q&&e.jsxs("div",{role:"group","aria-label":l("ecommerce.quantity","Quantity"),className:"flex items-center border rounded-lg h-12 bg-background border-input select-none",children:[e.jsx("button",{type:"button",onClick:()=>T(Math.max(1,h-1)),"aria-label":l("ecommerce.decrease_quantity","Decrease quantity"),className:"px-3 h-full flex items-center justify-center rounded-l-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",disabled:h<=1,children:e.jsx("span",{"aria-hidden":"true",children:"-"})}),e.jsx("span",{"aria-live":"polite","aria-atomic":"true",className:"w-8 text-center text-sm font-semibold tabular-nums",children:h}),e.jsx("button",{type:"button",onClick:()=>T(a!==null&&h>=a?h:h+1),"aria-label":l("ecommerce.increase_quantity","Increase quantity"),className:"px-3 h-full flex items-center justify-center rounded-r-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",disabled:a!==null&&h>=a,children:e.jsx("span",{"aria-hidden":"true",children:"+"})})]}),i&&(!s||!q)?e.jsx(ee.Button,{disabled:!0,className:"flex-1 h-12 text-md font-bold shadow-md",children:s?M:Y}):e.jsx(ce.AddToCartButton,{product:Q,quantity:h,className:"flex-1 h-12 text-base font-bold shadow-md transition-shadow hover:shadow-lg active:scale-[0.98]"})]})]}):C,e.jsx(se.Separator,{className:"opacity-60 my-0.5"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-center text-[11px] font-medium text-muted-foreground pt-1",children:[e.jsx("div",{className:"flex items-center justify-center gap-2",children:j?e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.Download,{className:"h-3.5 w-3.5"}),c("ecommerce.instant_digital_delivery")]}):e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.Package,{className:"h-3.5 w-3.5"}),c("ecommerce.free_shipping")]})}),e.jsx("div",{className:"flex items-center justify-center gap-2",children:e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.ShieldCheck,{className:"h-3.5 w-3.5"}),c("ecommerce.secure_checkout")]})})]})]})]})]})}),e.jsx("div",{className:"min-w-0 w-full",..._?void 0:K,children:_||(t.description_json?e.jsx("div",{className:"container mx-auto px-4 md:px-6 pb-12 prose prose-neutral dark:prose-invert max-w-none leading-relaxed",children:e.jsx(le.SimpleTiptapRenderer,{content:t.description_json})}):e.jsx("div",{className:"container mx-auto px-4 md:px-6 pb-12",children:e.jsx("p",{className:"italic text-sm text-muted-foreground",children:c("ecommerce.no_description")})}))}),P&&e.jsx("div",{id:"reviews-section",className:"border-t border-border mt-12 pt-12",children:P})]})};exports.ProductDetailsLayout=pe;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("@nextblock-cms/utils"),h=require("react"),s=require("../invoice-ui.cjs.js"),g=({images:r=[],className:n})=>{const{t:a}=i.useTranslations(),[o,d]=h.useState(0);if(!r.length)return e.jsx("div",{className:i.cn("relative aspect-square w-full overflow-hidden rounded-lg bg-secondary",n),children:e.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:s.translateOrFallback(a,"ecommerce.no_image","No image")})});const c=o<r.length?o:0,l=r[c];return e.jsxs("div",{className:i.cn("flex flex-col gap-4",n),children:[e.jsx("div",{className:"relative aspect-square w-full overflow-hidden rounded-lg border bg-white",children:e.jsx("img",{src:l.url,alt:l.alt??"",width:l.width??1e3,height:l.height??1e3,fetchPriority:"high",decoding:"async",className:"h-full w-full object-cover object-center"})}),r.length>1&&e.jsx("div",{className:"flex gap-4 overflow-x-auto p-1 pb-2",children:r.map((u,t)=>e.jsx("button",{type:"button",onClick:()=>d(t),"aria-current":c===t?"true":void 0,"aria-label":s.translateOrFallback(a,"ecommerce.gallery_show_image","Show image {index} of {total}").replace("{index}",String(t+1)).replace("{total}",String(r.length)),className:i.cn("relative aspect-square w-20 flex-shrink-0 overflow-hidden rounded-md border focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",c===t?"ring-2 ring-primary":"ring-1 ring-transparent hover:ring-primary/50"),children:e.jsx("img",{src:u.url,alt:"",width:80,height:80,loading:"lazy",decoding:"async",className:"h-full w-full object-cover object-center"})},t))})]})};exports.ProductGallery=g;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("./ProductCard.cjs.js"),d=require("@nextblock-cms/utils"),u=({products:o,columns:e=3,className:c})=>{const{t:s}=d.useTranslations();if(!o.length){const r=s("ecommerce.no_products_found");return t.jsx("div",{className:"py-12 text-center text-muted-foreground",children:r==="ecommerce.no_products_found"?"No products found.":r})}return t.jsx("div",{className:d.cn("grid gap-6 sm:grid-cols-2",e===3&&"lg:grid-cols-3",e===4&&"lg:grid-cols-4",c),children:o.map((r,i)=>t.jsx(n.ProductCard,{product:r,priority:i<e},r.id))})};exports.ProductGrid=u;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("react"),L=require("@nextblock-cms/ui/button"),R=require("@nextblock-cms/ui/input"),g=require("@nextblock-cms/ui/label"),d=require("lucide-react"),T=require("../countries.cjs.js"),D=require("../server-actions/shipping-actions.cjs.js"),I=require("@nextblock-cms/utils"),K=require("../use-price-formatter.cjs.js"),m=require("../states.cjs.js"),O=require("../CurrencyProvider.cjs.js"),M=({physicalSubtotal:S})=>{const C=K.usePriceFormatter(),[r,_]=a.useState("CA"),[n,v]=a.useState(""),[b,w]=a.useState(""),[p,j]=a.useState(!1),[o,f]=a.useState(null),[x,h]=a.useState(null),{t:s,lang:c}=I.useTranslations(),{activeCurrencyCode:y}=O.useCurrency(),l=(e,i)=>{const u=s(e);return u===e?i:u},q=m.getStatesForCountry(r),k=m.countryUsesStructuredStates(r),F=a.useMemo(()=>{try{return new Intl.DisplayNames([c],{type:"region"})}catch{return null}},[c]),P=l("select_an_option","Select an option"),E=l("state_province","State / Province"),N=async()=>{j(!0),h(null),f(null);try{const e=await D.getShippingEstimates(S,{country:r,state:n||void 0,postal_code:b},c,y);e.success&&e.methods?f(e.methods):h(e.errorKey?l(e.errorKey,e.error||s("ecommerce.no_rates_found")):e.error||s("ecommerce.no_rates_found"))}catch(e){console.error("[ShippingEstimator] Failed to load rates:",e),h(l("ecommerce.shipping_calculation_failed","We couldn't calculate shipping right now. Please try again."))}finally{j(!1)}};return t.jsxs("div",{className:"space-y-4 rounded-lg border bg-muted/30 p-4 mt-6",children:[t.jsxs("div",{className:"flex items-center gap-2 font-semibold text-sm",children:[t.jsx(d.Truck,{className:"h-4 w-4"}),t.jsx("span",{children:s("ecommerce.estimate_shipping")})]}),t.jsxs("div",{className:"grid gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(g.Label,{htmlFor:"estimate-country",className:"text-xs uppercase tracking-wider text-muted-foreground",children:s("ecommerce.country")}),t.jsx("select",{id:"estimate-country",name:"estimate-country",autoComplete:"shipping country",value:r,onChange:e=>{const i=e.target.value,u=m.getStatesForCountry(i);_(i),v(u.some(A=>A.code===n)?n:"")},className:"flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:T.countries.map(e=>t.jsx("option",{value:e.code,children:F?.of(e.code)??e.name},e.code))})]}),k&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(g.Label,{htmlFor:"estimate-state",className:"text-xs uppercase tracking-wider text-muted-foreground",children:s("state_province")}),t.jsxs("select",{id:"estimate-state",name:"estimate-state",autoComplete:"shipping address-level1",value:n,onChange:e=>v(e.target.value),className:"flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[t.jsx("option",{value:"",children:`${P}: ${E}`}),q.map(e=>t.jsx("option",{value:e.code,children:m.getSubdivisionLabel(r,e,c)},e.code))]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(g.Label,{htmlFor:"estimate-postal",className:"text-xs uppercase tracking-wider text-muted-foreground",children:s("ecommerce.postal_code")}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx(R.Input,{id:"estimate-postal",name:"estimate-postal",autoComplete:"shipping postal-code",placeholder:r==="CA"?"A1A 1A1":void 0,value:b,onChange:e=>w(e.target.value),onKeyDown:e=>{e.key==="Enter"&&!p&&(e.preventDefault(),N())},className:"h-9 text-sm bg-background"}),t.jsxs(L.Button,{size:"sm",variant:"secondary",onClick:N,disabled:p,className:"shrink-0",children:[p?t.jsx(d.Loader2,{className:"h-4 w-4 mr-1.5 animate-spin"}):t.jsx(d.Calculator,{className:"h-4 w-4 mr-1.5"}),s("ecommerce.calculate")]})]})]})]}),x&&t.jsx("p",{role:"alert",className:"text-xs text-destructive mt-2",children:x}),t.jsxs("div",{"aria-live":"polite",children:[o&&o.length>0&&t.jsxs("div",{className:"mt-4 space-y-2 border-t pt-3",children:[t.jsxs("p",{className:"text-xs font-medium text-muted-foreground uppercase",children:[s("ecommerce.available_rates"),":"]}),o.map(e=>t.jsxs("div",{className:"flex justify-between items-center p-3 border rounded-lg bg-muted/30",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(d.Truck,{className:"h-4 w-4 text-muted-foreground"}),t.jsx("span",{className:"text-sm font-medium",children:e.name})]}),t.jsx("span",{className:"text-sm font-bold tabular-nums",children:e.amount===0?s("ecommerce.free"):C(e.amount,y)})]},e.id))]}),o&&o.length===0&&!x&&t.jsx("p",{className:"text-xs text-muted-foreground mt-2 italic",children:s("ecommerce.no_rates_found")})]})]})};exports.ShippingEstimator=M;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),o=require("@nextblock-cms/utils"),s=require("./SimpleTiptapRenderer.cjs.js"),c=/<\/?[a-z][^>]*>/i,n=e=>c.test(e);function l({value:e,className:r}){const t=e?.trim();return t?n(t)?i.jsx("div",{className:r,dangerouslySetInnerHTML:{__html:s.toNoCookieEmbedSrc(t)??t}}):i.jsx("p",{className:o.cn("whitespace-pre-line",r),children:t}):null}exports.ShortDescription=l;exports.isHtmlShortDescription=n;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("react"),y=(t,a)=>a.reduce((s,r)=>{switch(r.type){case"bold":return e.jsx("strong",{children:s});case"italic":return e.jsx("em",{children:s});case"underline":case"u":return e.jsx("u",{children:s});case"strike":return e.jsx("s",{children:s});case"code":return e.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-[0.875em] font-mono",children:s});case"link":{const l=r.attrs?.href||"#",c=r.attrs?.target||"_blank";return e.jsx("a",{href:l,target:c,rel:"noopener noreferrer",className:"underline text-primary hover:text-primary/80",children:s})}case"highlight":{const l=r.attrs?.color,c=l?{backgroundColor:l}:{};return e.jsx("mark",{style:c,className:l?void 0:"bg-yellow-200 dark:bg-yellow-800/50",children:s})}case"subscript":return e.jsx("sub",{children:s});case"superscript":return e.jsx("sup",{children:s});case"textStyle":{const l={};return r.attrs?.color&&(l.color=r.attrs.color),r.attrs?.fontSize&&(l.fontSize=r.attrs.fontSize),r.attrs?.fontFamily&&(l.fontFamily=r.attrs.fontFamily),Object.keys(l).length>0?e.jsx("span",{style:l,children:s}):e.jsx(e.Fragment,{children:s})}default:return s}},t),g=["h1","h2","h3","h4","h5","h6"],f=(t,a,s,r)=>{const l=Math.max(1,Math.min(6,t)),c=g[l-1],o=r?.id;return m.createElement(c,{key:s,className:"font-bold my-4",id:o},a)},d=t=>{const a={},s={},r=t?.colspan,l=t?.rowspan,c=t?.colwidth;return r&&r>1&&(a.colSpan=r),l&&l>1&&(a.rowSpan=l),c&&Array.isArray(c)&&c[0]&&(s.minWidth=c[0]),Object.keys(s).length>0&&(a.style=s),a},h=(t,a)=>{if(t.type==="text"){const r=t.text??"";return e.jsx(m.Fragment,{children:t.marks?.length?y(r,t.marks):r},a)}const s=t.content?.map((r,l)=>h(r,l))??null;switch(t.type){case"doc":return e.jsx("div",{children:s},a);case"paragraph":{if(!t.content?.length||t.content.every(o=>o.type==="text"&&(!o.text||!o.text.trim())))return null;const l=t.attrs?.textAlign,c=l?{textAlign:l}:{};return e.jsx("p",{className:"mb-4",style:Object.keys(c).length?c:void 0,children:s},a)}case"heading":return f(t.attrs?.level||1,s,a,t.attrs??void 0);case"bulletList":return e.jsx("ul",{className:"list-disc pl-5 mb-4",children:s},a);case"orderedList":{const r=t.attrs?.start??1;return e.jsx("ol",{className:"list-decimal pl-5 mb-4",start:r!==1?r:void 0,children:s},a)}case"listItem":return e.jsx("li",{children:s},a);case"taskList":return e.jsx("ul",{className:"list-none pl-0 mb-4 space-y-1",children:s},a);case"taskItem":{const r=!!t.attrs?.checked;return e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("input",{type:"checkbox",checked:r,readOnly:!0,className:"mt-1.5 rounded"}),e.jsx("div",{className:r?"line-through text-muted-foreground":"",children:s})]},a)}case"blockquote":return e.jsx("blockquote",{className:"border-l-4 border-border pl-4 italic my-4",children:s},a);case"codeBlock":{const r=t.attrs?.language;return e.jsx("pre",{className:"bg-muted rounded-lg p-4 mb-4 overflow-x-auto","data-language":r||void 0,children:e.jsx("code",{className:"text-sm font-mono",children:s})},a)}case"horizontalRule":return e.jsx("hr",{className:"my-6 border-border"},a);case"hardBreak":return e.jsx("br",{},a);case"image":{const r=t.attrs?.src,l=t.attrs?.alt||"",c=t.attrs?.title,o=t.attrs?.width,n=t.attrs?.height,i={};return o&&(i.width=typeof o=="number"?`${o}px`:o),n&&(i.height=typeof n=="number"?`${n}px`:n),e.jsx("img",{src:r,alt:l??"",title:c,width:typeof o=="number"?o:void 0,height:typeof n=="number"?n:void 0,loading:"lazy",decoding:"async",style:Object.keys(i).length?i:void 0,className:"max-w-full h-auto rounded my-4"},a)}case"table":return e.jsx("div",{className:"overflow-x-auto my-4",children:e.jsx("table",{className:"w-full border-collapse border border-gray-300 dark:border-gray-700",style:{minWidth:500},children:e.jsx("tbody",{children:s})})},a);case"tableRow":return e.jsx("tr",{className:"border-b border-gray-300 dark:border-gray-700",children:s},a);case"tableHeader":return e.jsx("th",{...d(t.attrs??void 0),className:"bg-gray-100 dark:bg-gray-800 font-bold p-3 text-left border border-gray-300 dark:border-gray-700",children:s},a);case"tableCell":return e.jsx("td",{...d(t.attrs??void 0),className:"p-3 border border-gray-300 dark:border-gray-700",children:s},a);case"details":return e.jsx("details",{className:"my-4 border rounded-lg overflow-hidden",children:s},a);case"detailsSummary":return e.jsx("summary",{className:"cursor-pointer p-3 font-semibold bg-muted/30 hover:bg-muted/50",children:s},a);case"detailsContent":return e.jsx("div",{className:"p-3 border-t",children:s},a);case"youtube":{const r=u(t.attrs?.src),l=t.attrs?.width||640,c=t.attrs?.height||480;return e.jsx("div",{className:"relative my-4 overflow-hidden rounded-lg",style:{aspectRatio:`${l}/${c}`,maxWidth:l},children:e.jsx("iframe",{src:r,title:t.attrs?.title||"Embedded video",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,loading:"lazy",className:"absolute inset-0 w-full h-full"})},a)}case"iframe":{const r=u(t.attrs?.src);return e.jsx("div",{className:"my-4 overflow-hidden rounded-lg",style:{aspectRatio:"16/9"},children:e.jsx("iframe",{src:r,title:t.attrs?.title||"Embedded content",allowFullScreen:!0,loading:"lazy",className:"w-full h-full border-0"})},a)}case"mention":{const r=t.attrs?.label||t.attrs?.id||"";return e.jsxs("span",{className:"text-primary font-medium",children:["@",r]},a)}default:return e.jsx("div",{children:s},a)}},u=t=>t?.replace(/(?:https?:)?\/\/(?:www\.|m\.|music\.)?youtube\.com\/embed\//gi,"https://www.youtube-nocookie.com/embed/"),b=({content:t,className:a})=>{if(!t)return null;if(typeof t=="string"){if(t.trim().startsWith("{")||t.trim().startsWith("["))try{const r=JSON.parse(t);return e.jsx(b,{content:r,className:a})}catch{}return e.jsx("div",{className:a,dangerouslySetInnerHTML:{__html:u(t)??t}})}const s=t;return!s.content||!Array.isArray(s.content)?null:e.jsx("div",{className:a,children:s.content.map((r,l)=>h(r,l))})};exports.SimpleTiptapRenderer=b;exports.toNoCookieEmbedSrc=u;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),_=require("react"),$=require("@nextblock-cms/ui/button"),S=require("@nextblock-cms/ui/Skeleton"),L=require("../use-cart.cjs.js"),B=require("lucide-react"),q=require("sonner"),I=require("../pages/cms/products/actions.cjs.js"),a=require("@nextblock-cms/utils"),E=require("../use-price-formatter.cjs.js"),O=require("../CurrencyProvider.cjs.js"),y=require("../currency.cjs.js"),z=require("../trials.cjs.js"),D=({product:e})=>{const N=E.usePriceFormatter(),x=L.useCart(l=>l),{t:i}=a.useTranslations(),{activeCurrencyCode:c,currencies:m,defaultCurrency:o}=O.useCurrency(),[w,M]=_.useState([]),[P,k]=_.useState(!0),[n,d]=_.useState("annual");if(_.useEffect(()=>{async function l(){try{if(!e.id)return;const u=await I.getPublicFreemiusPricing(e.id);M(u)}catch(u){console.error("Failed to load pricing:",u)}finally{k(!1)}}l()},[e.id]),!x)return t.jsx(S.Skeleton,{className:"h-14 w-full"});const{addItem:A}=x,f=w[0],r=f?.pricing?.[0],T=()=>{let l=e.price,u=e.freemius_plan_id;r&&(n==="monthly"&&r.monthly_price!=null&&(l=a.majorUnitAmountToMinor(r.monthly_price,o.code)),n==="annual"&&r.annual_price!=null&&(l=a.majorUnitAmountToMinor(r.annual_price,o.code)),n==="lifetime"&&r.lifetime_price!=null&&(l=a.majorUnitAmountToMinor(r.lifetime_price,o.code)));const C=m.reduce((v,j)=>(v[j.code]=y.convertMinorUnitAmount({amount:l,fromCurrencyCode:o.code,toCurrencyCode:j.code,currencies:m,applyRounding:!0}),v),{}),U=C[c]??l;f&&f.id&&(u=f.id);const{success:R,error:F}=A({id:e.id,product_id:e.id,title:e.title,price:U,prices:C,image_url:e.image_url,slug:e.slug,sku:e.sku,language_id:e.language_id,translation_group_id:e.translation_group_id,product_type:"digital",payment_provider:"freemius",provider:"freemius",billing_cycle:n,freemius_product_id:e.freemius_product_id,freemius_plan_id:u,trial_period_days:e.trial_period_days??0,trial_requires_payment_method:e.trial_requires_payment_method??!1,is_taxable:e.is_taxable,currency_code:c});R?q.toast.success(i("ecommerce.added_to_cart_success",{item:e.title})):q.toast.error(F||i("ecommerce.added_to_cart_error"))};if(P)return t.jsx(S.Skeleton,{className:"h-32 w-full"});if(!f||!r)return t.jsx("div",{className:"p-4 border border-dashed rounded-lg text-center text-muted-foreground",children:i("ecommerce.pricing_unavailable")});const b=r.monthly_price!=null,p=r.annual_price!=null,h=r.lifetime_price!=null;n==="annual"&&!p&&(b?d("monthly"):h&&d("lifetime"));const s=z.getTrialSummary(e,i);let g=e.price;return n==="monthly"&&r.monthly_price!=null&&(g=y.convertMinorUnitAmount({amount:a.majorUnitAmountToMinor(r.monthly_price,o.code),fromCurrencyCode:o.code,toCurrencyCode:c,currencies:m,applyRounding:!0})),n==="annual"&&r.annual_price!=null&&(g=y.convertMinorUnitAmount({amount:a.majorUnitAmountToMinor(r.annual_price,o.code),fromCurrencyCode:o.code,toCurrencyCode:c,currencies:m,applyRounding:!0})),n==="lifetime"&&r.lifetime_price!=null&&(g=y.convertMinorUnitAmount({amount:a.majorUnitAmountToMinor(r.lifetime_price,o.code),fromCurrencyCode:o.code,toCurrencyCode:c,currencies:m,applyRounding:!0})),t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsxs("div",{role:"group","aria-label":i("ecommerce.billing_cycle")==="ecommerce.billing_cycle"?"Billing cycle":i("ecommerce.billing_cycle"),className:"flex bg-secondary/35 p-1 rounded-lg w-full max-w-sm mx-auto shadow-inner",children:[b&&t.jsx("button",{type:"button","aria-pressed":n==="monthly",onClick:()=>d("monthly"),className:`flex-1 py-1.5 text-xs font-semibold rounded-md transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring ${n==="monthly"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"}`,children:i("ecommerce.monthly")}),p&&t.jsx("button",{type:"button","aria-pressed":n==="annual",onClick:()=>d("annual"),className:`flex-1 py-1.5 text-xs font-semibold rounded-md transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring ${n==="annual"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"}`,children:i("ecommerce.annual")}),h&&t.jsx("button",{type:"button","aria-pressed":n==="lifetime",onClick:()=>d("lifetime"),className:`flex-1 py-1.5 text-xs font-semibold rounded-md transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring ${n==="lifetime"?"bg-background shadow-sm text-foreground":"text-muted-foreground hover:text-foreground"}`,children:i("ecommerce.lifetime")})]}),t.jsxs("div",{className:"text-center",children:[t.jsx("span",{className:"text-3xl font-extrabold text-foreground tabular-nums",children:N(g,c)}),n!=="lifetime"&&t.jsxs("span",{className:"text-muted-foreground text-sm ml-1.5",children:["/ ",i(n==="annual"?"ecommerce.year":"ecommerce.month")]}),s&&t.jsxs("div",{className:"mt-1 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:[s.label,t.jsx("span",{className:"mx-2 text-muted-foreground/50",children:"|"}),t.jsx("span",{className:"text-muted-foreground",children:s.paymentRequirementLabel})]})]}),t.jsxs($.Button,{onClick:T,className:"w-full h-12 text-base font-bold shadow-md transition-shadow hover:shadow-lg active:scale-[0.98]",children:[t.jsx(B.ShoppingCart,{className:"mr-2 h-4 w-4"}),s?.label?i("ecommerce.start_trial",{trial:s.label})==="ecommerce.start_trial"?`Start ${s.label}`:i("ecommerce.start_trial",{trial:s.label}):i("ecommerce.get_license")]})]})};exports.SubscriptionSelector=D;
|
package/lib/countries.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=[{code:"US",name:"United States"},{code:"CA",name:"Canada"},{code:"GB",name:"United Kingdom"},{code:"AU",name:"Australia"},{code:"NZ",name:"New Zealand"},{code:"IE",name:"Ireland"},{code:"FR",name:"France"},{code:"DE",name:"Germany"},{code:"IT",name:"Italy"},{code:"ES",name:"Spain"},{code:"MX",name:"Mexico"},{code:"BR",name:"Brazil"},{code:"AR",name:"Argentina"},{code:"CL",name:"Chile"},{code:"CO",name:"Colombia"},{code:"PE",name:"Peru"},{code:"ZA",name:"South Africa"},{code:"NG",name:"Nigeria"},{code:"KE",name:"Kenya"},{code:"IN",name:"India"},{code:"JP",name:"Japan"},{code:"KR",name:"South Korea"},{code:"CN",name:"China"},{code:"SG",name:"Singapore"},{code:"MY",name:"Malaysia"},{code:"PH",name:"Philippines"},{code:"TH",name:"Thailand"},{code:"VN",name:"Vietnam"},{code:"ID",name:"Indonesia"},{code:"AE",name:"United Arab Emirates"},{code:"SA",name:"Saudi Arabia"},{code:"EG",name:"Egypt"},{code:"MA",name:"Morocco"},{code:"DZ",name:"Algeria"},{code:"TN",name:"Tunisia"},{code:"PT",name:"Portugal"},{code:"NL",name:"Netherlands"},{code:"BE",name:"Belgium"},{code:"CH",name:"Switzerland"},{code:"AT",name:"Austria"},{code:"SE",name:"Sweden"},{code:"NO",name:"Norway"},{code:"DK",name:"Denmark"},{code:"FI",name:"Finland"},{code:"PL",name:"Poland"},{code:"CZ",name:"Czech Republic"},{code:"HU",name:"Hungary"},{code:"RO",name:"Romania"},{code:"BG",name:"Bulgaria"},{code:"GR",name:"Greece"},{code:"TR",name:"Turkey"},{code:"IL",name:"Israel"},{code:"CY",name:"Cyprus"},{code:"MT",name:"Malta"}],i={USA:"US","UNITED STATES OF AMERICA":"US",UK:"GB","GREAT BRITAIN":"GB"};function r(m){const o=m?.trim();if(!o)return null;const e=o.toUpperCase(),c=i[e];if(c)return c;const d=n.find(a=>a.code===e);return d?d.code:n.find(a=>a.name.toUpperCase()===e)?.code??null}exports.countries=n;exports.normalizeCountryCode=r;
|
package/lib/coupon-server.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("./coupons.cjs.js"),f=require("./currency.cjs.js");function P(e){if(!e)return null;const t=new Date(e);return Number.isNaN(t.getTime())?null:t}function q(e,t){return e==="all"||e===t}function E(e){return e==="stripe"||e==="freemius"?e:null}async function x(e){const{data:t,error:c}=await e.from("currencies").select("code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount").eq("is_active",!0).order("code",{ascending:!0});if(c)throw new Error(c.message);return(t||[]).map(i=>f.normalizeCurrencyRecord(i))}async function D(e){const{client:t,items:c}=e,i=await x(t);if(i.length===0)throw new Error("No active currencies are configured.");const o=i.find(n=>n.code===(e.currencyCode||"").toUpperCase())??f.getDefaultCurrency(i),d=[...new Set(c.map(n=>n.product_id).filter(Boolean))],s=[...new Set(c.map(n=>n.variant_id).filter(n=>!!n))];if(d.length===0)return{lines:[],currencies:i,selectedCurrency:o};const[{data:p,error:y},a]=await Promise.all([t.from("products").select("id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id").in("id",d),s.length?t.from("product_variants").select("id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at").in("id",s):Promise.resolve({data:[],error:null})]);if(y)throw new Error(y.message);if(a.error)throw new Error(a.error.message);const v=p||[],_=a.data||[],w=new Map(v.map(n=>[n.id,n])),m=new Map(_.map(n=>[n.id,n])),h=[];for(const n of c){const r=w.get(n.product_id);if(!r)continue;const l=E(r.payment_provider)??(r.product_type==="digital"?"freemius":"stripe"),g=n.variant_id?m.get(n.variant_id):null,u=g&&g.product_id===r.id?g:r,C=f.resolveEffectivePriceForCurrency({prices:f.normalizePriceMap(u.prices),salePrices:f.normalizeSalePriceMap(u.sale_prices),fallbackPrice:u.price,fallbackSalePrice:u.sale_price,saleStartAt:u.sale_start_at,saleEndAt:u.sale_end_at,scheduledPrice:u.scheduled_price,scheduledPrices:f.normalizePriceMap(u.scheduled_prices),scheduledPriceAt:u.scheduled_price_at,currencyCode:o.code,currencies:i}),M=l==="freemius"?1:Math.max(1,Number(n.quantity)||1),S=Math.max(0,C.sale_price??C.price);h.push({key:b.getCartLineCouponKey(n),product_id:r.id,variant_id:g?.id??null,title:r.title,quantity:M,provider:l,subtotal:S*M,freemius_product_id:r.freemius_product_id??null,freemius_plan_id:r.freemius_plan_id??null})}return{lines:h,currencies:i,selectedCurrency:o}}async function A(e,t){const{data:c,error:i}=await e.from("coupon_products").select("product_id").eq("coupon_id",t);if(i)throw new Error(i.message);return new Set((c||[]).map(o=>o.product_id))}function T(e,t){const c=e.reduce((s,p)=>s+p.subtotal,0),i=Math.min(t,c);if(c<=0||i<=0)return new Map;const o=new Map;let d=0;return e.forEach((s,p)=>{const a=p===e.length-1?i-d:Math.min(s.subtotal,Math.floor(i*s.subtotal/c));d+=a,o.set(s.key,a)}),o}async function k(e){const t=b.normalizeCouponCode(e.code);if(!t)return{success:!1,error:"Enter a coupon code.",errorKey:"ecommerce.coupon_code_required"};if(!e.items.length)return{success:!1,error:"Add an item to your cart before applying a coupon.",errorKey:"ecommerce.coupon_cart_empty"};const{data:c,error:i}=await e.client.from("coupons").select("id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count").ilike("code",t).maybeSingle();if(i)throw new Error(i.message);if(!c)return{success:!1,error:"Coupon code not found.",errorKey:"ecommerce.coupon_not_found"};const o=c,d=new Date,s=P(o.starts_at),p=P(o.ends_at);if(!o.is_active)return{success:!1,error:"This coupon is not active.",errorKey:"ecommerce.coupon_inactive"};if(s&&s>d)return{success:!1,error:"This coupon is not active yet.",errorKey:"ecommerce.coupon_not_started"};if(p&&p<=d)return{success:!1,error:"This coupon has expired.",errorKey:"ecommerce.coupon_expired"};if(o.redemption_limit!==null&&(o.redemptions_count??0)>=o.redemption_limit)return{success:!1,error:"This coupon has reached its redemption limit.",errorKey:"ecommerce.coupon_limit_reached"};const[{lines:y},a]=await Promise.all([D({client:e.client,items:e.items,currencyCode:e.currencyCode}),A(e.client,o.id)]),v=a.size>0,_=y.filter(r=>r.subtotal>0&&q(o.provider_scope,r.provider)&&(!v||a.has(r.product_id)));if(_.length===0)return{success:!1,error:"This coupon does not apply to the items in your cart.",errorKey:"ecommerce.coupon_not_applicable"};const w=o.discount_type==="fixed"?T(_,o.discount_amount):null,m=b.emptyProviderDiscounts(),h=_.map(r=>{const l=o.discount_type==="percent"?Math.min(r.subtotal,Math.round(r.subtotal*o.discount_amount/100)):w?.get(r.key)??0;return m[r.provider]+=l,{key:r.key,product_id:r.product_id,variant_id:r.variant_id,provider:r.provider,title:r.title,quantity:r.quantity,subtotal:r.subtotal,discount:l}});return{success:!0,quote:{couponId:o.id,code:o.code,name:o.name,discountType:o.discount_type,discountAmount:o.discount_amount,providerScope:o.provider_scope,eligibleSubtotal:_.reduce((r,l)=>r+l.subtotal,0),discountTotal:m.stripe+m.freemius,providerDiscounts:m,lineDiscounts:h}}}function I(e){const t=new Map;for(const c of e?.lineDiscounts??[])t.set(c.key,c.discount);return t}async function K(e){const{error:t}=await e.client.from("coupon_redemptions").insert({coupon_id:e.quote.couponId,order_id:e.orderId,coupon_code:e.quote.code,provider:e.provider,discount_total:Math.max(0,e.discountTotal),user_id:e.userId||null,customer_email:e.customerEmail||null,metadata:e.metadata||{}});if(t){console.error("Failed to record coupon redemption:",t);return}const{data:c}=await e.client.from("coupons").select("redemptions_count").eq("id",e.quote.couponId).single();await e.client.from("coupons").update({redemptions_count:(c?.redemptions_count??0)+1,updated_at:new Date().toISOString()}).eq("id",e.quote.couponId)}exports.getCouponQuote=k;exports.getQuoteLineDiscountMap=I;exports.recordCouponRedemption=K;
|
package/lib/coupons.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(e){return(e||"").trim().replace(/\s+/g,"").toUpperCase()}function r(e){return`${e.product_id}:${e.variant_id||"base"}`}function t(){return{stripe:0,freemius:0}}exports.emptyProviderDiscounts=t;exports.getCartLineCouponKey=r;exports.normalizeCouponCode=o;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C="NEXTBLOCK_CURRENCY";exports.CURRENCY_COOKIE_NAME=C;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function c(){const s=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,r=process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY||process.env.SUPABASE_ANON_KEY||process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY||process.env.SUPABASE_PUBLISHABLE_KEY;if(!s||!r)return[];const e=new URL("/rest/v1/currencies",s);e.searchParams.set("select","code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"),e.searchParams.set("is_active","eq.true"),e.searchParams.set("order","code.asc");const t=await fetch(e.toString(),{headers:{apikey:r,Authorization:`Bearer ${r}`}});if(!t.ok)return[];const a=await t.json();return Array.isArray(a)?a:[]}exports.fetchActiveCurrenciesFromRest=c;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("zustand"),t=require("zustand/middleware"),c=require("@nextblock-cms/utils"),o=a.create()(t.persist(e=>({activeCurrencyCode:null,hasHydrated:!1,setActiveCurrencyCode:r=>e({activeCurrencyCode:c.normalizeCurrencyCode(r)}),setHasHydrated:r=>e({hasHydrated:r})}),{name:"currency-preference-storage",storage:t.createJSONStorage(()=>localStorage),skipHydration:!0,partialize:e=>({activeCurrencyCode:e.activeCurrencyCode}),onRehydrateStorage:()=>e=>{e?.setHasHydrated(!0)}}));exports.useCurrencyPreferenceStore=o;
|
package/lib/currency-sync.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("server-only");const R=require("@nextblock-cms/db/server"),a=require("@nextblock-cms/utils"),S=require("./currency.cjs.js"),v="https://api.frankfurter.dev",z="id, code, symbol, exchange_rate, is_default, is_active, auto_update_exchange_rate, auto_sync_product_prices, exchange_rate_source, exchange_rate_updated_at, updated_at, rounding_mode, rounding_increment, rounding_charm_amount";function w(r){if(!r.id)throw new Error(`Currency ${a.normalizeCurrencyCode(r.code)} is missing its ID.`);return r.id}function F(){return process.env.FX_API_BASE_URL?.trim().replace(/\/+$/,"")||v}function A(r){try{const e=new URL(r),n=e.pathname.replace(/\/+$/,"");return`${e.host}${n&&n!=="/"?n:""}`}catch{return r}}function $(r){if(!r||typeof r!="object")return!1;const e=r;return typeof e.base=="string"&&typeof e.date=="string"&&typeof e.quote=="string"&&typeof e.rate=="number"&&Number.isFinite(e.rate)&&e.rate>0}function q(r){return Array.isArray(r)&&r.every($)}async function E(){const r=R.getServiceRoleSupabaseClient(),{data:e,error:n}=await r.from("currencies").select(z).order("code",{ascending:!0});if(n)throw new Error(n.message);return{supabase:r,currencies:e||[]}}async function D(r){const e=a.normalizeCurrencyCode(r.newDefaultCurrencyCode),n=Number(r.previousBaseRate);if(!Number.isFinite(n)||n<=0)throw new Error("Cannot rebase exchange rates without a valid previous base rate.");const{supabase:f,currencies:c}=await E();if(!c.find(o=>a.normalizeCurrencyCode(o.code)===e))throw new Error(`Currency ${e} was not found for rebasing.`);const i=new Date().toISOString(),d=[],p=c.map(o=>{const C=w(o),u=a.normalizeCurrencyCode(o.code),y=u===e?1:Number((o.exchange_rate/n).toFixed(10));return d.push(u),{...o,id:C,exchange_rate:y,auto_update_exchange_rate:u===e?!1:o.auto_update_exchange_rate,exchange_rate_source:u===e?"store-default":o.exchange_rate_source||"rebased-default",exchange_rate_updated_at:i,updated_at:i}}),{error:s}=await f.from("currencies").upsert(p,{onConflict:"id"});if(s)throw new Error(s.message);return{rebasedAt:i,newDefaultCurrencyCode:e,updatedCurrencies:d}}async function N(){const{supabase:r,currencies:e}=await E();if(!e.length)throw new Error("No currencies are configured yet.");const n=e.map(t=>S.normalizeCurrencyRecord(t)),f=S.getDefaultCurrency(n),c=a.normalizeCurrencyCode(f.code),_=e.find(t=>a.normalizeCurrencyCode(t.code)===c);if(!_)throw new Error(`Default currency ${c} could not be found for syncing.`);const i=e.filter(t=>a.normalizeCurrencyCode(t.code)!==c&&t.auto_update_exchange_rate!==!1),d=F(),p=A(d),s=new Date().toISOString(),{error:o}=await r.from("currencies").upsert({..._,id:w(_),exchange_rate:1,auto_update_exchange_rate:!1,exchange_rate_source:"store-default",exchange_rate_updated_at:s,updated_at:s},{onConflict:"id"});if(o)throw new Error(o.message);if(!i.length)return{baseCurrencyCode:c,fetchedAt:s,provider:p,providerUrl:d,skippedCurrencies:[],updatedCurrencies:[]};const C=new URL(`${d}/v2/rates`);C.searchParams.set("base",c),C.searchParams.set("quotes",[...new Set(i.map(t=>a.normalizeCurrencyCode(t.code)))].join(","));const u=await fetch(C.toString(),{cache:"no-store",headers:{Accept:"application/json"}});if(!u.ok){const t=await u.text();throw new Error(`FX provider request failed (${u.status}): ${t||"Unexpected response body."}`)}const y=await u.json();if(!q(y))throw new Error("FX provider returned an unexpected response payload.");const m=new Map;for(const t of y)m.set(a.normalizeCurrencyCode(t.quote),t.rate);const x=[],b=[],g=[];for(const t of i){const h=a.normalizeCurrencyCode(t.code),l=m.get(h);if(!l||!Number.isFinite(l)||l<=0){b.push(h);continue}g.push({...t,id:w(t),exchange_rate:Number(l.toFixed(10)),exchange_rate_source:p,exchange_rate_updated_at:s,updated_at:s}),x.push(h)}if(g.length){const{error:t}=await r.from("currencies").upsert(g,{onConflict:"id"});if(t)throw new Error(t.message)}return{baseCurrencyCode:c,fetchedAt:s,provider:p,providerUrl:d,skippedCurrencies:b,updatedCurrencies:x}}async function P(r){const e=a.normalizeCurrencyCode(r),n=R.getServiceRoleSupabaseClient(),{error:f}=await n.rpc("clear_currency_price_overrides",{target_currency:e});if(f)throw new Error(f.message);return{currencyCode:e}}exports.clearAutoSyncedCurrencyPriceOverrides=P;exports.rebaseStoreCurrencyExchangeRates=D;exports.syncStoreCurrencyRates=N;
|
package/lib/currency.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@nextblock-cms/utils"),A=["none","nearest","up","down","charm"],S={AU:"AUD",CA:"CAD",CH:"CHF",CZ:"CZK",DE:"EUR",DK:"DKK",ES:"EUR",EU:"EUR",FI:"EUR",FR:"EUR",GB:"GBP",IE:"EUR",IN:"INR",IT:"EUR",JP:"JPY",MX:"MXN",NL:"EUR",NO:"NOK",NZ:"NZD",PL:"PLN",PT:"EUR",SE:"SEK",SG:"SGD",US:"USD"};function g(r){return typeof r=="number"&&Number.isFinite(r)}function P(r,e=1){const n=typeof r=="string"?Number.parseInt(r,10):r;return typeof n=="number"&&Number.isFinite(n)&&n>0?Math.max(1,Math.round(n)):e}function U(r){const e=typeof r=="string"?Number.parseInt(r,10):r;return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.round(e):null}function b(r){if(typeof r=="string"){const e=r.trim().toLowerCase();if(A.includes(e))return e}return"none"}function s(r){const e=r||{},n=u.normalizeCurrencyCode(typeof e.code=="string"?e.code:null),o=e.is_default===!0;return{code:n,symbol:typeof e.symbol=="string"&&e.symbol.trim()?e.symbol.trim():n,exchange_rate:o?1:g(e.exchange_rate)&&e.exchange_rate>0?e.exchange_rate:1,is_default:o,is_active:e.is_active!==!1,auto_sync_product_prices:o?!1:e.auto_sync_product_prices===!0,rounding_mode:b(e.rounding_mode),rounding_increment:P(e.rounding_increment,1),rounding_charm_amount:U(e.rounding_charm_amount),auto_update_exchange_rate:o?!1:e.auto_update_exchange_rate!==!1,exchange_rate_source:typeof e.exchange_rate_source=="string"&&e.exchange_rate_source.trim()?e.exchange_rate_source.trim():null,exchange_rate_updated_at:typeof e.exchange_rate_updated_at=="string"&&e.exchange_rate_updated_at.trim()?e.exchange_rate_updated_at:null}}function C(r){return!r||typeof r!="object"||Array.isArray(r)?{}:Object.entries(r).reduce((e,[n,o])=>{const c=u.normalizeCurrencyCode(n),t=typeof o=="string"?Number.parseFloat(o):o;return g(t)&&t>=0&&(e[c]=Math.round(t)),e},{})}function M(r){return!r||typeof r!="object"||Array.isArray(r)?{}:Object.entries(r).reduce((e,[n,o])=>{const c=u.normalizeCurrencyCode(n),t=typeof o=="string"?Number.parseFloat(o):o;return t===null?(e[c]=null,e):(g(t)&&t>=0&&(e[c]=Math.round(t)),e)},{})}function f(r){return r.map(s).find(e=>e.is_default)??s(r[0])??s({code:"USD",symbol:"$",exchange_rate:1,is_default:!0,is_active:!0})}function _(r){return r.reduce((e,n)=>{const o=s(n);return e[o.code]=o,e},{})}function D(r,e){const n=u.normalizeCurrencyCode(e),o=f(r);return _(r)[n]?.exchange_rate??(n===o.code,1)}function y(r){const{amount:e,currencies:n}=r,o=u.normalizeCurrencyCode(r.fromCurrencyCode),c=u.normalizeCurrencyCode(r.toCurrencyCode);if(!Number.isFinite(e))return 0;if(o===c)return Math.round(e);const t=_(n),i=f(n),a=t[o]?.exchange_rate??(o===i.code?1:i.exchange_rate),d=t[c]?.exchange_rate??(c===i.code?1:i.exchange_rate),x=e/u.getCurrencyMinorUnitFactor(o)/a*d,h=u.majorUnitAmountToMinor(x,c);return r.applyRounding?R({amount:h,currencyCode:c,currencies:n}):h}function R(r){const e=Math.max(0,Math.round(r.amount)),n=u.normalizeCurrencyCode(r.currencyCode),c=_(r.currencies)[n]??s(f(r.currencies)),t=P(c.rounding_increment,1);if(c.rounding_mode==="nearest")return Math.round(e/t)*t;if(c.rounding_mode==="up")return Math.ceil(e/t)*t;if(c.rounding_mode==="down")return Math.floor(e/t)*t;if(c.rounding_mode==="charm"){const i=u.getCurrencyMinorUnitFactor(c.code),a=Math.min(Math.max(c.rounding_charm_amount??0,0),Math.max(i-1,0));let l=Math.floor(e/i)*i+a;return l<e&&(l+=i),l}return e}function k(r){const e=s(r);if(e.rounding_mode==="nearest")return`Nearest ${u.formatPrice(e.rounding_increment??1,e.code)}`;if(e.rounding_mode==="up")return`Round up to ${u.formatPrice(e.rounding_increment??1,e.code)}`;if(e.rounding_mode==="down")return`Round down to ${u.formatPrice(e.rounding_increment??1,e.code)}`;if(e.rounding_mode==="charm"){const n=e.rounding_charm_amount??0;return`Charm ending ${u.formatPrice(n,e.code)}`}return`Exact conversion (${u.minorUnitAmountToMajor(1,e.code).toFixed(u.getCurrencyMinorUnitFactor(e.code)===1?0:2)} step)`}function w(r,e){const n=f(e);return r[n.code]!==void 0?n.code:Object.keys(r)[0]??n.code}function p(r){const{amountMap:e,fallbackAmount:n,currencies:o}=r,c=u.normalizeCurrencyCode(r.currencyCode),t=C(e);if(t[c]!==void 0)return t[c];if(Object.keys(t).length>0){const i=w(t,o),a=t[i];if(a!==void 0)return y({amount:a,fromCurrencyCode:i,toCurrencyCode:c,currencies:o,applyRounding:!0})}if(typeof n=="number"&&Number.isFinite(n)){const i=f(o);return y({amount:n,fromCurrencyCode:i.code,toCurrencyCode:c,currencies:o,applyRounding:!0})}return 0}function z(r){const{prices:e={},salePrices:n={},fallbackPrice:o,fallbackSalePrice:c,currencies:t}=r,i=u.normalizeCurrencyCode(r.currencyCode),a=C(e),d=M(n),l=p({amountMap:a,fallbackAmount:o,currencyCode:i,currencies:t}),m=p({amountMap:C(d),fallbackAmount:c,currencyCode:i,currencies:t});return{currencyCode:i,price:l,sale_price:m>0&&m<=l?m:null}}function F(r){const e=(r.now??new Date).getTime();if(r.saleStartAt){const n=new Date(r.saleStartAt).getTime();if(Number.isFinite(n)&&e<n)return!1}if(r.saleEndAt){const n=new Date(r.saleEndAt).getTime();if(Number.isFinite(n)&&e>=n)return!1}return!0}function N(r){if(!r.scheduledPriceAt)return!1;const e=new Date(r.scheduledPriceAt).getTime();return Number.isFinite(e)?(r.now??new Date).getTime()>=e:!1}function E(r){const e=r.now??new Date,n=N({scheduledPriceAt:r.scheduledPriceAt,now:e}),o=n?r.scheduledPrices:r.prices,c=n?r.scheduledPrice:r.fallbackPrice,t=F({saleStartAt:r.saleStartAt,saleEndAt:r.saleEndAt,now:e});return z({prices:o,salePrices:t?r.salePrices:null,fallbackPrice:c,fallbackSalePrice:t?r.fallbackSalePrice:null,currencyCode:r.currencyCode,currencies:r.currencies})}function v(r){const e=r.entries.map(n=>E({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:r.currencyCode,currencies:r.currencies,now:r.now})).map(n=>n.sale_price??n.price).filter(n=>Number.isFinite(n));return e.length?{min:Math.min(...e),max:Math.max(...e)}:null}function j(r,e){const n=f(e),o=r?.trim();if(!o)return n.code;const t=o.replace("_","-").split("-").map(d=>d.toUpperCase())[1];if(!t)return n.code;const i=S[t];return i&&new Set(e.map(d=>u.normalizeCurrencyCode(d.code))).has(i)?i:n.code}function O(r){return r.map(s).sort((e,n)=>e.is_default!==n.is_default?e.is_default?-1:1:u.normalizeCurrencyCode(e.code).localeCompare(u.normalizeCurrencyCode(n.code)))}exports.CURRENCY_ROUNDING_MODES=A;exports.applyCurrencyRounding=R;exports.convertMinorUnitAmount=y;exports.describeCurrencyRoundingRule=k;exports.getCurrencyLookup=_;exports.getDefaultCurrency=f;exports.getExchangeRateForCurrency=D;exports.inferCurrencyCodeFromLocale=j;exports.isSaleWindowActive=F;exports.isScheduledPriceDue=N;exports.normalizeCurrencyRecord=s;exports.normalizeCurrencyRoundingMode=b;exports.normalizePriceMap=C;exports.normalizeSalePriceMap=M;exports.resolveEffectivePriceForCurrency=E;exports.resolvePriceForCurrency=z;exports.resolvePriceRangeForCurrency=v;exports.sortCurrencies=O;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@nextblock-cms/db/server"),w=require("./customer.cjs.js");function a(e){const s=e?.trim();return s||null}function p(e){return e?w.normalizeCustomerAddress({company_name:e.company_name,recipient_name:e.recipient_name,line1:e.line1,line2:e.line2,city:e.city,state:e.state,postal_code:e.postal_code,country_code:e.country_code}):null}function _(e,s){return e?.find(t=>t.address_type===s&&t.is_default)??e?.find(t=>t.address_type===s)??null}async function g(e,s,t,o){const r=w.normalizeCustomerAddress(o),{data:i,error:l}=await e.from("user_addresses").select("*").eq("user_id",s).eq("address_type",t).order("is_default",{ascending:!1}).order("updated_at",{ascending:!1});if(l)throw new Error(l.message);const d=i?.[0]??null,c=(i??[]).slice(1).map(n=>n.id);if(!r){if(i?.length){const n=i.map(h=>h.id),{error:m}=await e.from("user_addresses").delete().in("id",n);if(m)throw new Error(m.message)}return}const f={user_id:s,address_type:t,is_default:!0,company_name:r.company_name??null,recipient_name:r.recipient_name??null,line1:r.line1??null,line2:r.line2??null,city:r.city??null,state:r.state??null,postal_code:r.postal_code??null,country_code:r.country_code??null,updated_at:new Date().toISOString()};if(d){const{error:n}=await e.from("user_addresses").update(f).eq("id",d.id);if(n)throw new Error(n.message)}else{const{error:n}=await e.from("user_addresses").insert(f);if(n)throw new Error(n.message)}if(c.length){const{error:n}=await e.from("user_addresses").delete().in("id",c);if(n)throw new Error(n.message)}}async function y(e,s){const t=s??u.createClient(),{data:o,error:r}=await t.from("user_addresses").select("*").eq("user_id",e).in("address_type",["billing","shipping"]).order("is_default",{ascending:!1}).order("updated_at",{ascending:!1});if(r)throw new Error(r.message);const i=p(_(o??[],"billing")),l=p(_(o??[],"shipping"));return{billingAddress:i,shippingAddress:l}}async function A(e){const s=e.client??u.createClient();await g(s,e.userId,"billing",e.billingAddress??null),await g(s,e.userId,"shipping",e.shippingAddress??null)}async function E(e){const s=e.client??u.createClient(),t=a(e.fullName),o=a(e.phone);if(!t&&!o)return;const{data:r,error:i}=await s.from("profiles").select("full_name, phone").eq("id",e.userId).maybeSingle();if(i)throw new Error(i.message);if(!r)return;const l=a(r.full_name)||t,d=a(r.phone)||o;if(a(r.full_name)===l&&a(r.phone)===d)return;const{error:c}=await s.from("profiles").update({full_name:l,phone:d,updated_at:new Date().toISOString()}).eq("id",e.userId);if(c)throw new Error(c.message)}exports.fillMissingUserProfileCheckoutDetails=E;exports.getDefaultUserAddresses=y;exports.upsertDefaultUserAddresses=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@nextblock-cms/db/server"),l=require("./invoice-server.cjs.js"),g=require("./freemius-license.cjs.js"),o=["pending"];function i(e){return e??d.createClient()}async function u(e){const{data:{user:r},error:t}=await e.auth.getUser();if(t||!r)throw new Error("Unauthorized");return r}async function m(e){const r=i(e),t=await u(r),{data:n,error:s}=await r.from("orders").select("id, invoice_number, paid_at, created_at, currency, status, provider, subtotal, shipping_total, tax_total, total").eq("user_id",t.id).not("status","in",`(${o.join(",")})`).order("created_at",{ascending:!1});if(s)throw new Error(s.message);return n??[]}async function c(e,r){const t=i(r),n=await u(t),{data:s,error:a}=await t.from("orders").select("id, invoice_number, paid_at, created_at, currency, status, provider, subtotal, shipping_total, tax_total, total").eq("id",e).eq("user_id",n.id).not("status","in",`(${o.join(",")})`).maybeSingle();if(a)throw new Error(a.message);return s??null}async function _(e,r){const t=i(r),n=await c(e,t);if(!n)return null;const s=n.invoice_number?await l.getInvoicePresentationData(e,t):null,a=n.provider==="freemius"?await g.getFreemiusOrderLicense({orderId:e,client:t}):null;return{order:n,invoice:s,license:a}}exports.getCurrentCustomerOrder=c;exports.getCurrentCustomerOrderInvoice=_;exports.getCurrentCustomerOrders=m;
|
package/lib/customer.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./countries.cjs.js"),c=require("./states.cjs.js"),m=()=>({company_name:"",recipient_name:"",line1:"",line2:"",city:"",state:"",postal_code:"",country_code:"CA"});function t(e){const n=e?.trim();return n||null}function o(e){if(!e)return null;const n={company_name:t(e.company_name),recipient_name:t(e.recipient_name),line1:t(e.line1),line2:t(e.line2),city:t(e.city),postal_code:t(e.postal_code),country_code:a.normalizeCountryCode(e.country_code)};return n.state=c.normalizeSubdivisionCode(n.country_code,t(e.state)),Object.values(n).some(Boolean)?n:null}function u(e){const n=o(e);return n?!!(n.recipient_name&&n.line1&&n.city&&n.postal_code&&n.country_code&&(!c.countryUsesStructuredStates(n.country_code)||n.state)):!1}function d(e){const n=o(e.billing),r=o(e.shipping),i=t(e.email)?.toLowerCase()??null,s=t(e.phone),l=t(e.name)??n?.recipient_name??r?.recipient_name??null;return{email:i,name:l,phone:s,billing:n,shipping:r}}function y(e,n){const r=o(e),i=o(n);return JSON.stringify(r)===JSON.stringify(i)}exports.addressesMatch=y;exports.emptyCustomerAddress=m;exports.isCustomerAddressComplete=u;exports.normalizeCustomerAddress=o;exports.normalizeOrderCustomerDetails=d;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("papaparse");function o(n,t){const e=u.unparse(n),a=new Blob([e],{type:"text/csv;charset=utf-8;"}),i=document.createElement("a");if(i.download!==void 0){const l=URL.createObjectURL(a);i.setAttribute("href",l),i.setAttribute("download",t),i.style.visibility="hidden",document.body.appendChild(i),i.click(),document.body.removeChild(i)}}function c(n){return n.map(t=>({"Order ID":t.id,Date:new Date(t.created_at).toLocaleDateString(),"Customer Name":t.customer?.full_name||t.customer_details?.name||"Guest","Customer Email":t.customer?.email||t.customer_details?.email||"N/A",Subtotal:(t.subtotal/100).toFixed(2),"Tax Amount":(t.tax_total/100).toFixed(2),"Shipping Amount":(t.shipping_total/100).toFixed(2),Total:(t.total/100).toFixed(2),Currency:t.currency.toUpperCase(),"Payment Status":t.status,"Fulfillment Status":t.status==="shipped"?"Shipped":t.status==="paid"?"Paid":t.status==="trial"?"Trial":"Pending","Payment Gateway":t.provider==="freemius"?"Freemius":"Stripe"}))}function m(n){return n.filter(t=>t.status==="paid").map(t=>{const e=t.customer_details?.shipping||t.customer_details?.billing,a=e?.country_code||"N/A",i=e?.state||"N/A",l=t.tax_details?.lines?.[0]?.rate?.display_name||"N/A",s=t.tax_details?.lines?.[0]?.rate?.percentage||0;return{Date:t.paid_at?new Date(t.paid_at).toLocaleDateString():new Date(t.created_at).toLocaleDateString(),"Order ID":t.id,Destination:`${i}, ${a}`,"Tax Rate Applied":`${s}% (${l})`,"Total Taxable Amount":(t.subtotal/100).toFixed(2),"Tax Collected":(t.tax_total/100).toFixed(2),Currency:t.currency.toUpperCase()}})}function p(n){const t={};return n.filter(e=>e.status==="paid").forEach(e=>{const a=e.currency.toUpperCase();t[a]||(t[a]={volume:0,subtotal:0,tax:0}),t[a].volume+=e.total,t[a].subtotal+=e.subtotal,t[a].tax+=e.tax_total}),Object.entries(t).map(([e,a])=>({Currency:e,"Total Transaction Volume":(a.volume/100).toFixed(2),"Total Subtotal":(a.subtotal/100).toFixed(2),"Total Tax Collected":(a.tax/100).toFixed(2)}))}exports.generateCSV=o;exports.mapGeneralSalesLedger=c;exports.mapMultiCurrencyRevenue=p;exports.mapTaxLiabilitySummary=m;
|
package/lib/factory.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./providers/stripe.cjs.js"),t=require("./providers/freemius.cjs.js");function i(e){return e==="freemius"?new t.FreemiusProvider:new r.StripeProvider}exports.getPaymentProvider=i;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("@nextblock-cms/utils"),f=require("./providers/freemius.cjs.js"),h=require("./payment-config.cjs.js");function y(e){if(!e)return null;const o=new Date(e);return Number.isNaN(o.getTime())?e:o.toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"")}function C(e){return e==="percent"?"percentage":"dollar"}function E(e){return f.resolveFreemiusCheckoutCredentials(e).apiKey||f.readFreemiusEnvValue("FREEMIUS_API_KEY")}async function l(e){await h.hydrateFreemiusEnvFromDb();const o=E(e.productId);if(!o)throw new Error(`Missing Freemius API bearer token for product ${e.productId}. Set FREEMIUS_API_KEY or FREEMIUS_CHECKOUT_PRODUCTS_JSON[${e.productId}].apiKey.`);const s=e.couponId?`/${e.couponId}`:"",t=await fetch(`https://api.freemius.com/v1/products/${e.productId}/coupons${s}.json`,{method:e.method,headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json",Accept:"application/json"},body:e.method==="DELETE"?void 0:JSON.stringify(e.body||{})}),n=await t.text(),r=n?JSON.parse(n):null;if(!t.ok)throw new Error(r?.message||r?.error?.message||`Freemius coupon request failed with ${t.status}`);return r}function g(e,o){return{code:e.code,discount:e.discount_type==="fixed"?I.minorUnitAmountToMajor(e.discount_amount,"USD"):e.discount_amount,discount_type:C(e.discount_type),plans:o.planIds.length>0?o.planIds.join(","):null,licenses:null,billing_cycles:null,start_date:y(e.starts_at),end_date:y(e.ends_at),redemptions_limit:e.redemption_limit??null,has_renewals_discount:!1,has_addons_discount:!1,is_one_per_user:!1,is_active:e.is_active,user_type:"all"}}async function F(e,o){if(o.provider_scope==="stripe")return[];const{data:s,error:t}=await e.from("coupon_products").select("product_id").eq("coupon_id",o.id);if(t)throw new Error(t.message);const n=(s||[]).map(c=>c.product_id);let r=e.from("products").select("id, freemius_product_id, freemius_plan_id").eq("payment_provider","freemius").not("freemius_product_id","is",null);n.length>0&&(r=r.in("id",n));const{data:u,error:i}=await r;if(i)throw new Error(i.message);const d=new Map;for(const c of u||[]){const a=String(c.freemius_product_id||"").trim();if(!a)continue;const p=d.get(a)??{freemiusProductId:a,productId:c.id,planIds:[]};n.length>0&&c.freemius_plan_id&&p.planIds.push(String(c.freemius_plan_id)),d.set(a,p)}return[...d.values()].map(c=>({...c,planIds:[...new Set(c.planIds)]}))}async function P(e,o){const{data:s}=await e.from("coupon_freemius_mappings").select("sync_status, sync_error").eq("coupon_id",o),t=s||[];if(t.length===0){await e.from("coupons").update({freemius_sync_status:"not_required",freemius_sync_error:null}).eq("id",o);return}const n=t.find(r=>r.sync_status==="failed");await e.from("coupons").update({freemius_sync_status:n?"failed":"synced",freemius_sync_error:n?.sync_error??null}).eq("id",o)}async function q(e){const{data:o,error:s}=await e.client.from("coupons").select("id, code, name, internal_note, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit").eq("id",e.couponId).single();if(s||!o)return{success:!1,error:s?.message||"Coupon not found"};const t=o,n=await F(e.client,t);await e.client.from("coupons").update({freemius_sync_status:n.length>0?"pending":"not_required",freemius_sync_error:null}).eq("id",t.id);for(const r of n){const{data:u}=await e.client.from("coupon_freemius_mappings").select("id, freemius_coupon_id").eq("coupon_id",t.id).eq("freemius_product_id",r.freemiusProductId).maybeSingle(),i=g(t,r);try{const d=await l({productId:r.freemiusProductId,method:u?.freemius_coupon_id?"PUT":"POST",couponId:u?.freemius_coupon_id??null,body:i}),c=d?.coupon??d;await e.client.from("coupon_freemius_mappings").upsert({id:u?.id,coupon_id:t.id,product_id:r.productId,freemius_product_id:r.freemiusProductId,freemius_coupon_id:c?.id?String(c.id):u?.freemius_coupon_id??null,freemius_coupon_code:t.code,sync_status:"synced",sync_error:null,remote_payload:d,last_synced_at:new Date().toISOString()},{onConflict:"coupon_id,freemius_product_id"})}catch(d){await e.client.from("coupon_freemius_mappings").upsert({id:u?.id,coupon_id:t.id,product_id:r.productId,freemius_product_id:r.freemiusProductId,freemius_coupon_id:u?.freemius_coupon_id??null,freemius_coupon_code:t.code,sync_status:"failed",sync_error:d.message||"Freemius sync failed",last_synced_at:new Date().toISOString()},{onConflict:"coupon_id,freemius_product_id"})}}return await P(e.client,t.id),{success:!0,targetCount:n.length}}function v(e){const o=(e.sku||"").toUpperCase().replace(/[^A-Z0-9]/g,"");return o?`SALE${o}`.slice(0,32):`SALE${e.productId.replace(/[^A-Za-z0-9]/g,"").toUpperCase()}`.slice(0,32)}function T(e,o){if(typeof e!="number"||e<=0||typeof o!="number"||o<0||o>=e)return null;const s=Math.round((1-o/e)*100);return s<=0||s>100?null:s}async function b(e){const{data:o,error:s}=await e.client.from("products").select("id, sku, price, sale_price, sale_start_at, sale_end_at, payment_provider, freemius_product_id, freemius_plan_id").eq("id",e.productId).maybeSingle();if(s||!o)return{success:!1,error:s?.message||"Product not found"};const t=o,n=String(t.freemius_product_id||"").trim();if(t.payment_provider!=="freemius"||!n)return{success:!0,skipped:!0,reason:"not_a_freemius_product"};const r=T(t.price,t.sale_price),u=r!==null,{data:i}=await e.client.from("product_freemius_sale_coupons").select("id, freemius_coupon_id, freemius_coupon_code, discount_percent, is_active").eq("product_id",t.id).maybeSingle();if(!u&&!i?.freemius_coupon_id)return i?.id&&await e.client.from("product_freemius_sale_coupons").update({is_active:!1,updated_at:new Date().toISOString()}).eq("id",i.id),{success:!0,active:!1};const d=i?.freemius_coupon_code||v({sku:t.sku,productId:t.id}),c=t.freemius_plan_id?[String(t.freemius_plan_id)]:[],a=r??i?.discount_percent??1,p={id:t.id,code:d,name:`Scheduled sale ${t.sku||t.id}`,discount_type:"percent",discount_amount:a,is_active:u,starts_at:t.sale_start_at,ends_at:t.sale_end_at,redemption_limit:null},S={productId:t.id,planIds:c},w=g(p,S);try{const _=await l({productId:n,method:i?.freemius_coupon_id?"PUT":"POST",couponId:i?.freemius_coupon_id??null,body:w}),m=_?.coupon??_;return await e.client.from("product_freemius_sale_coupons").upsert({id:i?.id,product_id:t.id,freemius_product_id:n,freemius_plan_id:t.freemius_plan_id?String(t.freemius_plan_id):null,freemius_coupon_id:m?.id?String(m.id):i?.freemius_coupon_id??null,freemius_coupon_code:d,discount_percent:r,starts_at:t.sale_start_at,ends_at:t.sale_end_at,is_active:u,sync_status:"synced",sync_error:null,remote_payload:_,last_synced_at:new Date().toISOString()},{onConflict:"product_id"}),{success:!0,active:u,code:d}}catch(_){return await e.client.from("product_freemius_sale_coupons").upsert({id:i?.id,product_id:t.id,freemius_product_id:n,freemius_plan_id:t.freemius_plan_id?String(t.freemius_plan_id):null,freemius_coupon_id:i?.freemius_coupon_id??null,freemius_coupon_code:d,discount_percent:r,starts_at:t.sale_start_at,ends_at:t.sale_end_at,is_active:u,sync_status:"failed",sync_error:_.message||"Freemius sale coupon sync failed",last_synced_at:new Date().toISOString()},{onConflict:"product_id"}),{success:!1,error:_.message||"Freemius sale coupon sync failed"}}}async function D(e){const{data:o}=await e.client.from("coupon_freemius_mappings").select("id, freemius_product_id, freemius_coupon_id").eq("coupon_id",e.couponId).not("freemius_coupon_id","is",null);for(const s of o||[])try{await l({productId:s.freemius_product_id,couponId:s.freemius_coupon_id,method:"DELETE"}),await e.client.from("coupon_freemius_mappings").update({sync_status:"deleted",sync_error:null,updated_at:new Date().toISOString()}).eq("id",s.id)}catch(t){await e.client.from("coupon_freemius_mappings").update({sync_status:"failed",sync_error:t.message||"Freemius delete failed",updated_at:new Date().toISOString()}).eq("id",s.id)}}exports.deleteCouponFromFreemius=D;exports.syncCouponToFreemius=q;exports.syncProductSaleCouponToFreemius=b;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("@freemius/sdk"),p=require("./payment-config.cjs.js"),E=require("./providers/freemius.cjs.js"),l=20,c="This license cannot be claimed automatically. Use the key from your purchase email.";function m(r){if(!r||typeof r!="string")return null;const e=r.trim(),s=/(?:z|[+-]\d{2}:?\d{2})$/i.test(e)?e:`${e.replace(" ","T")}Z`,i=Date.parse(s);return Number.isFinite(i)?i:null}function o(r,e){return r==null||e===null||e===void 0?!1:String(r).trim()===String(e).trim()}function u(r){return(r??"").trim().toLowerCase()}function d(r){const{license:e,request:n,user:s}=r,i=r.maxAgeMinutes??l,a=(r.now??new Date).getTime();if(!e||!o(e.id,n.licenseId))return{ok:!1,reason:"license_not_found"};const t=m(e.created);return t===null||a-t>i*6e4||t-a>5*6e4?{ok:!1,reason:"too_old"}:o(e.plugin_id,n.productId)?e.is_cancelled?{ok:!1,reason:"cancelled"}:!n.userId?.trim()||!o(e.user_id,n.userId)?{ok:!1,reason:"user_mismatch"}:!s||!u(n.email)||u(s.email)!==u(n.email)?{ok:!1,reason:"email_mismatch"}:typeof e.activated=="number"&&e.activated>0?{ok:!1,reason:"already_activated"}:e.secret_key?{ok:!0}:{ok:!1,reason:"no_key"}:{ok:!1,reason:"product_mismatch"}}async function y(r,e){await p.hydrateFreemiusEnvFromDb();const n=E.resolveFreemiusCheckoutCredentials(r.productId);if(!n.apiKey||!n.secretKey||!n.publicKey)return{error:"The license service is not configured for this product.",ok:!1,reason:"not_configured",status:503};const s=new _.Freemius({apiKey:n.apiKey,productId:Number(r.productId),publicKey:n.publicKey,secretKey:n.secretKey});let i=null,a=null;try{i=await s.api.license.retrieve(r.licenseId),i?.user_id!==null&&i?.user_id!==void 0&&(a=await s.api.user.retrieve(String(i.user_id)))}catch(f){return console.error("[Freemius License Claim] Freemius lookup failed:",f),{error:"Freemius could not be reached to verify the license.",ok:!1,reason:"upstream_error",status:502}}const t=d({license:i,maxAgeMinutes:e?.maxAgeMinutes,now:e?.now,request:r,user:a});return t.ok?{expiration:i?.expiration??null,licenseKey:String(i?.secret_key),ok:!0,planId:i?.plan_id!==null&&i?.plan_id!==void 0?String(i.plan_id):null}:{error:c,ok:!1,reason:t.reason,status:403}}exports.FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES=l;exports.FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE=c;exports.claimFreemiusLicenseKey=y;exports.evaluateFreemiusLicenseClaim=d;exports.parseFreemiusTimestamp=m;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@freemius/sdk"),l=require("./payment-config.cjs.js"),u=require("./providers/freemius.cjs.js");async function c(n,e){if(!n)return null;const r=u.resolveFreemiusCheckoutCredentials(n);return!r.apiKey||!r.secretKey||!r.publicKey?null:new t.Freemius({productId:Number(n),apiKey:r.apiKey,secretKey:r.secretKey,publicKey:r.publicKey}).api.license.retrieve(e)}async function a(n){const{data:e,error:r}=await n.client.from("orders").select("id, provider, freemius_product_id, freemius_license_id, freemius_trial_ends_at").eq("id",n.orderId).maybeSingle();if(r||!e||e.provider!=="freemius"||!e.freemius_license_id)return null;let i=null;try{await l.hydrateFreemiusEnvFromDb(),i=await c(e.freemius_product_id,String(e.freemius_license_id))}catch(s){console.error("[Freemius License] Failed to retrieve license key:",s)}return{licenseId:String(e.freemius_license_id),licenseKey:i?.secret_key??null,planId:i?.plan_id!=null?String(i.plan_id):null,expiration:i?.expiration??null,trialEndsAt:e.freemius_trial_ends_at??null,isCancelled:!!i?.is_cancelled}}exports.getFreemiusOrderLicense=a;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("crypto"),A=require("@freemius/sdk"),R=require("@supabase/supabase-js"),K=require("./invoice-server.cjs.js"),j=require("./order-inventory.cjs.js"),d=require("./providers/freemius.cjs.js");function s(e){return e==null||e===""?null:String(e)}function u(e){const r=s(e);if(!r)return null;const t=r.includes("T")?r:r.replace(" ","T")+"Z",i=new Date(t);return Number.isNaN(i.getTime())?r:i.toISOString()}function x(e){if(e==null||e==="")return null;const r=Number(e);return Number.isFinite(r)?r:null}function f(...e){return e.some(r=>{const t=x(r);return t!==null&&t>0})}function l(e){return e==="pending"||e==="trial"}function y(e){return["license.cancelled","license.deleted","license.expired","subscription.cancelled","subscription.renewal.failed.last","trial.cancelled","trial.expired"].includes(e||"")}function M(e,r){return e==="license.extended"&&(r?.is_renewal===!0||r?.is_renewal===1||r?.is_renewal==="1"||r?.is_renewal==="true")}function B(e){const r=e.objects?.payment??e.data?.payment??e.data;return e.type==="payment.created"&&f(r?.gross,r?.total_gross,r?.amount,r?.initial_amount)}function b(e){const r=e?.purchase??null,t=e?.trial??null;return{freemius_product_id:s(r?.plugin_id)??s(r?.product_id)??s(r?.productId)??s(t?.plugin_id)??s(t?.product_id)??s(t?.productId),freemius_plan_id:s(r?.plan_id)??s(r?.planId),freemius_license_id:s(r?.license_id)??s(r?.licenseId)??s(t?.license_id)??s(t?.licenseId),freemius_subscription_id:s(r?.subscription_id)??s(r?.subscriptionId)??s(t?.subscription_id)??s(t?.subscriptionId),freemius_trial_id:s(t?.id),freemius_user_id:s(r?.user_id)??s(r?.userId)??s(t?.user_id)??s(t?.userId)??s(e?.user?.id),freemius_trial_ends_at:u(t?.trial_ends_at)??u(t?.trialEndsAt)??u(r?.trial_ends)??u(r?.trialEnds)}}function S(e,r="pending"){const t=e?.purchase??null,i=e?.trial??null;return r==="paid"?"paid":i&&(i.canceled_at||i.canceledAt)&&l(r)?"cancelled":i?"trial":t?(t.canceled_at||t.canceledAt)&&l(r)?"cancelled":f(t.initial_amount,t.initialAmount,t.gross,t.total_gross,t.totalGross)?"paid":t.trial_ends||t.trialEnds||t.subscription_id||t.subscriptionId?"trial":r:r}function m(e){const{event:r,currentStatus:t,purchaseData:i}=e;return t==="paid"&&y(r.type)?"paid":y(r.type)?l(t)?"cancelled":t:B(r)||M(r.type,r.data)||i&&f(i.initialAmount,i.initial_amount,i.gross,i.totalGross,i.total_gross)?"paid":i?.canceled===!0&&l(t)?"cancelled":t==="pending"&&(i?.trialEndsAt||i?.trial_ends_at||i?.trialEnds||i?.trial_ends)||(i?.subscriptionId||i?.subscription_id||r.type==="subscription.created"||r.type==="license.created")&&t==="pending"?"trial":t}function N(e,...r){const t=r.filter(i=>!!i);return e==="paid"||t.includes("paid")?"paid":t.includes("cancelled")?"cancelled":t.includes("trial")?"trial":t.includes("shipped")?"shipped":t.includes("refunded")?"refunded":e}function P(e,r){const t={freemius_last_event_type:r,freemius_last_synced_at:new Date().toISOString()};for(const[i,n]of Object.entries(e))n!=null&&n!==""&&(t[i]=n);return t}function E(){const e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,r=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!r)throw new Error("Missing Supabase Service Role environment variables");return R.createClient(e,r,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function T(e,r){const{data:t,error:i}=await e.from("orders").select("id, status, provider, freemius_product_id, freemius_plan_id, freemius_license_id, freemius_subscription_id, freemius_trial_id, freemius_user_id, freemius_trial_ends_at").eq("id",r).single();if(i||!t)throw new Error(i?.message||"Order not found");return t}async function U(e,r){const{data:t,error:i}=await e.from("orders").select("id, status, provider, freemius_product_id, freemius_plan_id, freemius_license_id, freemius_subscription_id, freemius_trial_id, freemius_user_id, freemius_trial_ends_at").eq("freemius_license_id",r).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(i)throw new Error(i.message);return t??null}async function h(e){const r=P(e.metadata,e.eventType),t=e.order.status,i=t==="paid"&&e.nextStatus!=="paid"?"paid":e.nextStatus;i!==t&&(r.status=i);const{error:n}=await e.client.from("orders").update(r).eq("id",e.order.id);if(n)throw new Error(n.message);return i==="paid"&&t!=="paid"&&(await K.assignInvoiceMetadata({orderId:e.order.id,client:e.client}),await j.applyOrderInventoryDeduction(e.client,e.order.id)),i}async function q(e){const r=e.client??E(),t=await T(r,e.orderId);if(t.provider!=="freemius")return{success:!1,error:"Only Freemius orders can be synced from Freemius checkout"};const i=b(e.checkoutResponse);let n=null;if(i.freemius_license_id)try{n=await F(i.freemius_product_id??t.freemius_product_id,i.freemius_license_id)}catch(O){console.error("[Freemius Checkout Sync] Failed to retrieve purchase data:",O)}const a={type:"checkout.purchaseCompleted",data:{license_id:i.freemius_license_id},objects:{}},c={...i,...v(a,n)},o=S(e.checkoutResponse,t.status),_=n?m({event:a,currentStatus:t.status,purchaseData:n}):null,k=o==="paid"?t.status:o,w=N(t.status,k,_),C=await h({client:r,order:t,nextStatus:w,metadata:c,eventType:"checkout.purchaseCompleted"});return{success:!0,orderId:t.id,status:C,metadata:c}}function g(e){return s(e.data?.license_id)??s(e.objects?.license?.id)??s(e.objects?.subscription?.license_id)??s(e.objects?.payment?.license_id)??s(e.data?.payment?.license_id)}function v(e,r){const t=e.objects?.license,i=e.objects?.subscription,n=e.objects?.trial,a=e.objects?.payment??e.data?.payment;return{freemius_product_id:s(r?.productId)??s(r?.product_id)??s(t?.plugin_id)??s(i?.plugin_id)??s(a?.plugin_id),freemius_plan_id:s(r?.planId)??s(r?.plan_id)??s(t?.plan_id),freemius_license_id:s(r?.licenseId)??s(r?.license_id)??g(e),freemius_subscription_id:s(r?.subscriptionId)??s(r?.subscription_id)??s(i?.id)??s(e.data?.subscription_id),freemius_trial_id:s(n?.id)??s(e.data?.trial_id),freemius_user_id:s(r?.userId)??s(r?.user_id)??s(e.objects?.user?.id),freemius_trial_ends_at:u(n?.trial_ends_at)??u(n?.trial_ends)??u(t?.trial_ends)??u(r?.trialEndsAt)??u(r?.trial_ends_at)}}async function F(e,r){if(!e)return null;const t=d.resolveFreemiusCheckoutCredentials(e);return!t.apiKey||!t.secretKey||!t.publicKey?null:new A.Freemius({productId:Number(e),apiKey:t.apiKey,secretKey:t.secretKey,publicKey:t.publicKey}).purchase.retrievePurchaseData(r)}async function W(e){const r=e.client??E(),t=g(e.event);if(!t)return{success:!0,ignored:!0,reason:"missing_license_id",type:e.event.type};const i=await U(r,t);if(!i)return{success:!0,ignored:!0,reason:"unknown_license_id",licenseId:t,type:e.event.type};let n=null;try{n=await F(i.freemius_product_id??e.event.objects?.license?.plugin_id,t)}catch(_){console.error("[Freemius Sync] Failed to retrieve purchase data:",_)}const a=v(e.event,n),c=m({event:e.event,currentStatus:i.status,purchaseData:n}),o=await h({client:r,order:i,nextStatus:c,metadata:a,eventType:e.event.type??null});return{success:!0,orderId:i.id,status:o,type:e.event.type}}function I(){const e=[d.readFreemiusEnvValue("FREEMIUS_SECRET_KEY"),d.readFreemiusEnvValue("FREEMIUS_ECOMMERCE_SANDBOX_SECRET_KEY"),...Object.values(d.parseFreemiusCheckoutCredentialsMap()??{}).map(r=>r.secretKey??null)];return Array.from(new Set(e.filter(r=>!!r)))}function L(e,r){return r?I().some(t=>{const i=p.createHmac("sha256",t).update(e).digest("hex");try{return p.timingSafeEqual(Buffer.from(i,"hex"),Buffer.from(r,"hex"))}catch{return!1}}):!1}exports.extractFreemiusCheckoutMetadata=b;exports.getFreemiusWebhookSecretCandidates=I;exports.resolveFreemiusStatusFromCheckoutResponse=S;exports.resolveFreemiusStatusFromWebhookEvent=m;exports.syncFreemiusCheckoutOrder=q;exports.syncFreemiusOrderFromWebhookEvent=W;exports.verifyFreemiusWebhookSignature=L;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("@freemius/sdk"),F=require("./payment-config.cjs.js"),v=require("./providers/freemius.cjs.js"),y="A NextBlock license or trial already exists for this email. Activate that key from CMS Settings → Packages, or purchase a license at nextblock.dev.",m="The trial could not be provisioned automatically. Start it from CMS Settings → Packages instead.";function I(e){return e.toISOString().slice(0,19).replace("T"," ")}function S(e,n){const r=Number.isFinite(n)&&n>0?Math.floor(n):30;return new Date(e.getTime()+r*24*60*60*1e3)}function E(e){const n=e.filter(t=>t.id!==null&&t.id!==void 0);if(n.length===0)return null;const r=n.filter(t=>!t.is_hidden);return[...r.length>0?r:n].sort((t,s)=>{const a=t.licenses===null||t.licenses===void 0?Number.POSITIVE_INFINITY:t.licenses,u=s.licenses===null||s.licenses===void 0?Number.POSITIVE_INFINITY:s.licenses;return a-u})[0]}function k(e){return e.existingLicenses.some(r=>r.plugin_id===null||r.plugin_id===void 0||String(r.plugin_id).trim()===String(e.productId).trim())?{ok:!1,reason:"already_licensed"}:{ok:!0}}function b(e){return e.trim().toLowerCase()}async function w(e,n){await F.hydrateFreemiusEnvFromDb();const r=v.resolveFreemiusCheckoutCredentials(e.productId);if(!r.apiKey||!r.secretKey||!r.publicKey)return{error:"The license service is not configured for this product.",ok:!1,reason:"not_configured",status:503};const c=new T.Freemius({apiKey:r.apiKey,productId:Number(e.productId),publicKey:r.publicKey,secretKey:r.secretKey}),t=b(e.email),s=c.api.__unstable_ApiClient,a={product_id:e.productId};let u=[];try{const i=await c.api.user.retrieveByEmail(t);i?.id!==null&&i?.id!==void 0&&(u=await c.api.user.retrieveLicenses(i.id))}catch(i){return console.error("[Freemius trial] user lookup failed:",i),{error:"Freemius could not be reached to verify eligibility.",ok:!1,reason:"upstream_error",status:502}}if(!k({existingLicenses:u,productId:e.productId}).ok)return{error:y,ok:!1,reason:"already_licensed",status:409};let d=null;try{const{data:i,error:l}=await s.GET("/products/{product_id}/plans/{plan_id}/pricing.json",{params:{path:{...a,plan_id:e.planId}}});if(l)throw new Error(JSON.stringify(l));const o=E(i?.pricing??[]);d=o?.id!==null&&o?.id!==void 0?String(o.id):null}catch(i){return console.error("[Freemius trial] pricing lookup failed:",i),{error:"Freemius could not be reached to resolve the plan pricing.",ok:!1,reason:"upstream_error",status:502}}if(!d)return{error:m,ok:!1,reason:"no_pricing",status:502};const h=n?.now??new Date,f=I(S(h,e.trialDays));let p=null,_=null;try{const{data:i,error:l}=await s.POST("/products/{product_id}/plans/{plan_id}/pricing/{pricing_id}/licenses.json",{body:{expires_at:f,is_block_features:!0,send_email:!1},params:{path:{...a,plan_id:e.planId,pricing_id:d}}});if(l)throw new Error(JSON.stringify(l));const o=i?.license;p=o?.secret_key?.trim()||null,_=o?.id!==null&&o?.id!==void 0?String(o.id):null}catch(i){return console.error("[Freemius trial] license creation failed:",i),{error:"Freemius could not create the trial license.",ok:!1,reason:"upstream_error",status:502}}if(!p)return{error:m,ok:!1,reason:"no_key",status:502};let g=!1;try{const{error:i}=await s.PUT("/products/{product_id}/licenses.json",{body:{email:t,license_key:p,name:e.name.trim()},params:{path:a}});g=!i,i&&console.warn("[Freemius trial] license assignment refused:",JSON.stringify(i))}catch(i){console.warn("[Freemius trial] license assignment failed:",i)}return{assigned:g,expiresAt:f,licenseId:_,licenseKey:p,ok:!0,planId:e.planId,pricingId:d}}exports.FREEMIUS_TRIAL_ALREADY_USED_MESSAGE=y;exports.FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE=m;exports.computeTrialExpiry=S;exports.evaluateTrialEligibility=k;exports.formatFreemiusTimestamp=I;exports.pickTrialPricing=E;exports.provisionFreemiusTrialLicense=w;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o="ecommerce_inventory_settings",r={trackQuantities:!0,enableTaxes:!1,taxCalculationMode:"manual"};function a(e,t=!0){if(typeof e=="boolean")return e;if(typeof e=="string"){const n=e.trim().toLowerCase();if(["true","1","yes","on"].includes(n))return!0;if(["false","0","no","off"].includes(n))return!1}return t}function c(e,t=r.taxCalculationMode){return e==="automatic"?"automatic":e==="manual"?"manual":t}function i(e){if(e&&typeof e=="object"&&!Array.isArray(e)){const t=e;return{trackQuantities:a(t.trackQuantities??t.track_quantities,r.trackQuantities),enableTaxes:a(t.enableTaxes??t.enable_taxes,r.enableTaxes),taxCalculationMode:c(t.taxCalculationMode??t.tax_calculation_mode,r.taxCalculationMode)}}return{trackQuantities:a(e,r.trackQuantities),enableTaxes:r.enableTaxes,taxCalculationMode:r.taxCalculationMode}}async function s(e){const{data:t,error:n}=await e.from("site_settings").select("value").eq("key",o).maybeSingle();return n||!t?r:i(t.value)}async function u(e,t){return e.from("site_settings").upsert({key:o,value:{track_quantities:t.trackQuantities,enable_taxes:t.enableTaxes,tax_calculation_mode:t.taxCalculationMode}})}function l(e){return{error:`${e} is no longer available.`,errorKey:"ecommerce.inventory_item_unavailable",errorParams:{item:e},errorStatus:409}}function m(e,t){return{error:`Only ${t} units remain for ${e}.`,errorKey:"ecommerce.inventory_insufficient",errorParams:{item:e,count:t},errorStatus:409}}exports.DEFAULT_ECOMMERCE_INVENTORY_SETTINGS=r;exports.ECOMMERCE_INVENTORY_SETTINGS_KEY=o;exports.createInventoryInsufficientError=m;exports.createInventoryUnavailableError=l;exports.getEcommerceInventorySettings=s;exports.normalizeEcommerceInventorySettings=i;exports.upsertEcommerceInventorySettings=u;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("@nextblock-cms/db/server"),h=require("./customer.cjs.js"),d=require("./invoice.cjs.js"),T=require("./order-tax-details.cjs.js");function w(e){return e?e.startsWith("http")||e.startsWith("/")?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 c(e){return e??E.getServiceRoleSupabaseClient()}function L(e){if(!e)return null;const o=e.media?.object_key??e.media?.file_path??null;return{id:e.id,name:e.name??null,url:w(o),width:e.media?.width??null,height:e.media?.height??null}}const U="active_logo_id",p=`
|
|
2
|
-
id,
|
|
3
|
-
name,
|
|
4
|
-
media:media_id (
|
|
5
|
-
object_key,
|
|
6
|
-
file_path,
|
|
7
|
-
width,
|
|
8
|
-
height
|
|
9
|
-
)
|
|
10
|
-
`;async function k(e){const{data:o}=await e.from("site_settings").select("value").eq("key",U).maybeSingle(),n=o?.value,t=typeof n=="string"&&n.length>0?n:null;if(t){const{data:s}=await e.from("logos").select(p).eq("id",t).maybeSingle();if(s)return s}const{data:r}=await e.from("logos").select(p).order("created_at",{ascending:!1}).limit(1).maybeSingle();return r??null}async function g(e){const o=c(e),[n,t]=await Promise.all([o.from("site_settings").select("value").eq("key",d.INVOICE_SETTINGS_KEY).maybeSingle(),k(o)]);return{settings:d.normalizeInvoiceSettings(n.data?.value??d.DEFAULT_INVOICE_SETTINGS),logo:L(t)}}async function O(e){const o=c(e.client),{data:n,error:t}=await o.rpc("assign_order_invoice_metadata",{p_order_id:e.orderId,p_paid_at:e.paidAt??null}).single();if(t)throw new Error(t.message);return{invoiceNumber:n?.invoice_number??null,paidAt:n?.paid_at??null}}async function m(e,o){const n=c(o),{data:t,error:r}=await n.from("orders").select(`
|
|
11
|
-
id,
|
|
12
|
-
invoice_number,
|
|
13
|
-
paid_at,
|
|
14
|
-
created_at,
|
|
15
|
-
currency,
|
|
16
|
-
status,
|
|
17
|
-
provider,
|
|
18
|
-
subtotal,
|
|
19
|
-
shipping_total,
|
|
20
|
-
discount_total,
|
|
21
|
-
coupon_code,
|
|
22
|
-
tax_total,
|
|
23
|
-
total,
|
|
24
|
-
customer_details,
|
|
25
|
-
tax_details,
|
|
26
|
-
order_items (
|
|
27
|
-
id,
|
|
28
|
-
product_id,
|
|
29
|
-
variant_id,
|
|
30
|
-
quantity,
|
|
31
|
-
price_at_purchase
|
|
32
|
-
)
|
|
33
|
-
`).eq("id",e).single();if(r||!t)throw new Error(r?.message||"Order not found");const s=(t.order_items||[]).map(a=>a.product_id).filter(Boolean),u=(t.order_items||[]).map(a=>a.variant_id).filter(Boolean),[v,f]=await Promise.all([s.length?n.from("products").select("id, title, sku").in("id",s):Promise.resolve({data:[],error:null}),u.length?n.from("product_variants").select("id, sku").in("id",u):Promise.resolve({data:[],error:null})]),b=new Map((v.data||[]).map(a=>[a.id,a])),y=new Map((f.data||[]).map(a=>[a.id,a])),_=(t.order_items||[]).map(a=>{const i=a.product_id?b.get(a.product_id):null,l=a.variant_id?y.get(a.variant_id):null,I=i?.title||"Product",S=l?.sku?`SKU: ${l.sku}`:i?.sku?`SKU: ${i.sku}`:null;return{id:a.id,product_id:a.product_id??null,variant_id:a.variant_id??null,title:I,description:S,quantity:a.quantity,unit_amount:a.price_at_purchase,total_amount:a.price_at_purchase*a.quantity,sku:l?.sku??i?.sku??null}});return{id:t.id,invoice_number:t.invoice_number??null,paid_at:t.paid_at??null,created_at:t.created_at??null,currency:t.currency||"usd",status:t.status,provider:t.provider??null,subtotal:typeof t.subtotal=="number"?t.subtotal:_.reduce((a,i)=>a+i.total_amount,0),shipping_total:typeof t.shipping_total=="number"?t.shipping_total:0,discount_total:typeof t.discount_total=="number"?t.discount_total:0,coupon_code:t.coupon_code??null,tax_total:typeof t.tax_total=="number"?t.tax_total:0,total:t.total,customer_details:h.normalizeOrderCustomerDetails(t.customer_details??{}),tax_details:T.normalizeOrderTaxDetails(t.tax_details),items:_}}async function R(e,o){const n=c(o),[t,r]=await Promise.all([m(e,n),g(n)]);return{order:t,settings:r.settings,logo:r.logo}}exports.assignInvoiceMetadata=O;exports.getInvoiceBrandingData=g;exports.getInvoiceOrder=m;exports.getInvoicePresentationData=R;
|
package/lib/invoice-ui.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function r(e,t,a){const n=e(t);return n===t?a:n}function i(e){return{invoice:r(e,"invoice","Invoice"),invoiceNumber:r(e,"invoice_number","Invoice #"),orderNumber:r(e,"order_number","Order #"),paidOn:r(e,"paid_on","Paid on"),status:r(e,"status","Status"),from:r(e,"from","From"),billTo:r(e,"bill_to","Bill to"),shipTo:r(e,"ship_to","Ship to"),item:r(e,"product","Item"),details:r(e,"details","Details"),quantity:r(e,"ecommerce.qty","Qty"),price:r(e,"price","Price"),amount:r(e,"amount","Amount"),subtotal:r(e,"ecommerce.subtotal","Subtotal"),discount:r(e,"ecommerce.discount","Discount"),shipping:r(e,"ecommerce.shipping","Shipping"),tax:r(e,"ecommerce.tax","Tax"),total:r(e,"ecommerce.total","Total"),taxBreakdown:r(e,"tax_breakdown","Tax breakdown"),taxRegistrations:r(e,"tax_registrations","Tax registrations")}}function s(e){return e==="fr"?"fr-CA":"en-US"}function o(e,t){if(!e)return"";switch(e.toLowerCase()){case"paid":return r(t,"order_status_paid","Paid");case"pending":return r(t,"order_status_pending","Pending");case"trial":return r(t,"order_status_trial","Trial");case"shipped":return r(t,"order_status_shipped","Shipped");case"cancelled":return r(t,"order_status_cancelled","Cancelled");case"refunded":return r(t,"order_status_refunded","Refunded");default:return e}}function c(e,t){return e?{...e,order:{...e.order,status:o(e.order.status,t)}}:null}exports.buildInvoiceDocumentLabels=i;exports.getInvoiceLocale=s;exports.localizeInvoicePresentationData=c;exports.translateOrFallback=r;exports.translateOrderStatus=o;
|
package/lib/invoice.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u="invoice_settings",o={businessName:"",email:"",phone:"",address:{line1:"",line2:"",city:"",state:"",postal_code:"",country_code:"CA"},taxRegistrations:[]};function t(e){return typeof e!="string"?"":e.trim()}function s(e){if(!e||typeof e!="object"||Array.isArray(e))return{...o.address};const n=e;return{line1:t(n.line1),line2:t(n.line2),city:t(n.city),state:t(n.state),postal_code:t(n.postal_code),country_code:t(n.country_code).toUpperCase()||"CA"}}function c(e){return Array.isArray(e)?e.map(n=>{if(!n||typeof n!="object"||Array.isArray(n))return null;const i=n,r=t(i.label),a=t(i.value);return!r&&!a?null:{label:r,value:a}}).filter(n=>!!n):[]}function m(e){if(!e||typeof e!="object"||Array.isArray(e))return{...o};const n=e;return{businessName:t(n.business_name??n.businessName),email:t(n.email),phone:t(n.phone),address:s(n.address),taxRegistrations:c(n.tax_registrations??n.taxRegistrations)}}function l(e){return{business_name:t(e.businessName),email:t(e.email),phone:t(e.phone),address:s(e.address),tax_registrations:c(e.taxRegistrations)}}function f(e,n="usd",i="en-US"){return new Intl.NumberFormat(i,{style:"currency",currency:n.toUpperCase()}).format(e/100)}function y(e,n="en-US",i="UTC"){if(!e)return"";const r=new Date(e);return Number.isNaN(r.getTime())?"":new Intl.DateTimeFormat(n,{year:"numeric",month:"short",day:"numeric",timeZone:i}).format(r)}function p(e){if(!e)return[];const n=[e.city,e.state,e.postal_code].filter(Boolean).join(", ").replace(", ,",",").trim();return["company_name"in e&&e.company_name||"","recipient_name"in e&&e.recipient_name||"",e.line1||"",e.line2||"",n,e.country_code||""].filter(Boolean)}exports.DEFAULT_INVOICE_SETTINGS=o;exports.INVOICE_SETTINGS_KEY=u;exports.formatInvoiceCurrency=f;exports.formatInvoiceDate=y;exports.getInvoiceAddressLines=p;exports.normalizeInvoiceSettings=m;exports.serializeInvoiceSettings=l;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("server-only");const l=require("postgres"),c=require("./inventory-settings.cjs.js");function y(){return process.env.POSTGRES_URL||process.env.DATABASE_URL||null}async function _(r){const n=y();if(!n)throw new Error("Missing POSTGRES_URL or DATABASE_URL for inventory fallback");const e=l(n,{ssl:"require",onnotice:()=>{}});try{await e.begin(async o=>{const t=o,s=(await t`
|
|
2
|
-
SELECT inventory_deducted_at
|
|
3
|
-
FROM public.orders
|
|
4
|
-
WHERE id = ${r}
|
|
5
|
-
FOR UPDATE
|
|
6
|
-
`)[0];if(!s||s.inventory_deducted_at)return;const u=await t`
|
|
7
|
-
SELECT value
|
|
8
|
-
FROM public.site_settings
|
|
9
|
-
WHERE key = ${c.ECOMMERCE_INVENTORY_SETTINGS_KEY}
|
|
10
|
-
LIMIT 1
|
|
11
|
-
`;if(!c.normalizeEcommerceInventorySettings(u[0]?.value).trackQuantities){await t`
|
|
12
|
-
UPDATE public.orders
|
|
13
|
-
SET inventory_deducted_at = now()
|
|
14
|
-
WHERE id = ${r}
|
|
15
|
-
`;return}const E=await t`
|
|
16
|
-
SELECT
|
|
17
|
-
product_id,
|
|
18
|
-
variant_id,
|
|
19
|
-
SUM(quantity)::integer AS quantity
|
|
20
|
-
FROM public.order_items
|
|
21
|
-
WHERE order_id = ${r}
|
|
22
|
-
GROUP BY product_id, variant_id
|
|
23
|
-
`;for(const a of E){if(a.variant_id){const i=(await t`
|
|
24
|
-
SELECT
|
|
25
|
-
sku,
|
|
26
|
-
stock_quantity
|
|
27
|
-
FROM public.product_variants
|
|
28
|
-
WHERE id = ${a.variant_id}
|
|
29
|
-
LIMIT 1
|
|
30
|
-
`)[0];if(!i?.sku)continue;await t`
|
|
31
|
-
INSERT INTO public.inventory_items (sku, quantity)
|
|
32
|
-
VALUES (${i.sku}, ${Math.max(0,i.stock_quantity??0)})
|
|
33
|
-
ON CONFLICT (sku) DO NOTHING
|
|
34
|
-
`,await t`
|
|
35
|
-
UPDATE public.inventory_items
|
|
36
|
-
SET
|
|
37
|
-
quantity = GREATEST(COALESCE(quantity, 0) - ${a.quantity}, 0),
|
|
38
|
-
updated_at = now()
|
|
39
|
-
WHERE sku = ${i.sku}
|
|
40
|
-
`;continue}if(a.product_id){const i=(await t`
|
|
41
|
-
SELECT
|
|
42
|
-
sku,
|
|
43
|
-
stock
|
|
44
|
-
FROM public.products
|
|
45
|
-
WHERE id = ${a.product_id}
|
|
46
|
-
LIMIT 1
|
|
47
|
-
`)[0];if(!i?.sku)continue;await t`
|
|
48
|
-
INSERT INTO public.inventory_items (sku, quantity)
|
|
49
|
-
VALUES (${i.sku}, ${Math.max(0,i.stock??0)})
|
|
50
|
-
ON CONFLICT (sku) DO NOTHING
|
|
51
|
-
`,await t`
|
|
52
|
-
UPDATE public.inventory_items
|
|
53
|
-
SET
|
|
54
|
-
quantity = GREATEST(COALESCE(quantity, 0) - ${a.quantity}, 0),
|
|
55
|
-
updated_at = now()
|
|
56
|
-
WHERE sku = ${i.sku}
|
|
57
|
-
`}}await t`
|
|
58
|
-
UPDATE public.orders
|
|
59
|
-
SET inventory_deducted_at = now()
|
|
60
|
-
WHERE id = ${r}
|
|
61
|
-
`})}finally{await e.end()}}async function p(r,n){const{error:e}=await r.rpc("apply_order_inventory_deduction",{p_order_id:n});if(!e)return{method:"rpc"};console.error(`[Inventory] RPC deduction failed for order ${n}:`,e);try{return await _(n),{method:"sql-fallback"}}catch(o){const t=o instanceof Error?o.message:String(o);throw new Error(`Failed to reconcile inventory for order ${n}. RPC error: ${e.message}. Fallback error: ${t}`)}}exports.applyOrderInventoryDeduction=p;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m={gst:"GST",qst:"QST",hst:"HST",pst:"PST",vat:"VAT",sales_tax:"Sales Tax",amusement_tax:"Amusement Tax",retail_delivery_fee:"Retail Delivery Fee"};function c(){return new Date().toISOString()}function l(t){const e=t.tax_type?.trim().toLowerCase();return e&&m[e]?m[e]:t.display_name||"Tax"}function s(t){return typeof t.effective_percentage=="number"?t.effective_percentage:typeof t.percentage=="number"?t.percentage:null}function f(t){return t.jurisdiction?t.jurisdiction:[t.state,t.country].filter(Boolean).join(", ")||null}function p(t){return JSON.stringify({source:t.source,rate_id:t.rate.id??null,display_name:l(t.rate),percentage:s(t.rate),jurisdiction:f(t.rate),jurisdiction_level:t.rate.jurisdiction_level??null,country:t.rate.country??null,state:t.rate.state??null,tax_type:t.rate.tax_type??null,inclusive:t.rate.inclusive??null})}function u(t){const e=new Map;for(const o of t){const n=p(o),a=e.get(n);if(!a){e.set(n,{...o,scope:"aggregate",line_item_id:null});continue}a.amount+=o.amount,typeof a.taxable_amount=="number"||typeof o.taxable_amount=="number"?a.taxable_amount=(typeof a.taxable_amount=="number"?a.taxable_amount:0)+(typeof o.taxable_amount=="number"?o.taxable_amount:0):a.taxable_amount=null,a.description!==o.description&&(a.description=null),a.taxability_reason!==o.taxability_reason&&(a.taxability_reason=null)}return[...e.values()].sort((o,n)=>{const a=l(o.rate).localeCompare(l(n.rate));return a!==0?a:(s(o.rate)??0)-(s(n.rate)??0)})}function x(t){if(!t||typeof t!="object"||Array.isArray(t))return null;const e=t;return typeof e.currency!="string"?null:{source:e.source==="manual"||e.source==="stripe_checkout"||e.source==="none"?e.source:"none",mode:e.mode==="automatic"?"automatic":"manual",currency:e.currency,subtotal:typeof e.subtotal=="number"?e.subtotal:0,shipping_total:typeof e.shipping_total=="number"?e.shipping_total:0,tax_total:typeof e.tax_total=="number"?e.tax_total:0,total:typeof e.total=="number"?e.total:0,is_finalized:!!e.is_finalized,lines:Array.isArray(e.lines)?u(e.lines):[],updated_at:typeof e.updated_at=="string"?e.updated_at:c()}}function g(t){const e=t.currency||"usd",o=t.calculation.mode==="manual"&&!t.calculation.isPendingExternalCalculation;return{source:t.calculation.enabled&&t.calculation.mode==="manual"?"manual":t.calculation.mode==="automatic"?"stripe_checkout":"none",mode:t.calculation.mode,currency:e,subtotal:t.subtotal,shipping_total:t.shippingTotal,tax_total:t.calculation.amount,total:t.total,is_finalized:o,lines:t.calculation.enabled&&t.calculation.mode==="manual"?t.calculation.lines.map(n=>({scope:"aggregate",source:"manual",amount:n.amount,taxable_amount:t.calculation.taxableSubtotal,description:n.name,rate:{id:n.id??null,display_name:n.name,percentage:n.rate,country:n.country_code,state:n.state_code??null}})):[],updated_at:c()}}function _(t){return{id:t.id,display_name:t.display_name,percentage:t.percentage,effective_percentage:t.effective_percentage,jurisdiction:t.jurisdiction,jurisdiction_level:t.jurisdiction_level,country:t.country,state:t.state,tax_type:t.tax_type,inclusive:t.inclusive,description:t.description}}function y(t){const e=t.currency||t.session.currency||"usd",o=typeof t.session.amount_total=="number"?t.session.amount_total:0,n=t.session.total_details?.amount_tax??0,a=[];for(const r of t.lineItems)for(const i of r.taxes||[])a.push({scope:"line_item",source:"stripe_checkout",amount:i.amount,taxable_amount:i.taxable_amount,description:r.description||void 0,line_item_id:r.id,taxability_reason:i.taxability_reason,rate:_(i.rate)});if(a.length===0)for(const r of t.session.total_details?.breakdown?.taxes||[])a.push({scope:"aggregate",source:"stripe_checkout",amount:r.amount,taxable_amount:r.taxable_amount,description:r.rate.display_name,taxability_reason:r.taxability_reason,rate:_(r.rate)});const d=u(a);return{source:n>0||d.length>0?"stripe_checkout":"none",mode:t.fallbackMode==="manual"?"manual":"automatic",currency:e,subtotal:t.subtotal,shipping_total:t.shippingTotal,tax_total:n,total:o,is_finalized:!0,lines:d,updated_at:c()}}exports.aggregateOrderTaxLines=u;exports.buildOrderTaxDetailsFromCalculation=g;exports.buildOrderTaxDetailsFromStripeSession=y;exports.getOrderTaxRateJurisdiction=f;exports.getOrderTaxRateLabel=l;exports.getOrderTaxRatePercentage=s;exports.normalizeOrderTaxDetails=x;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("@nextblock-cms/ui"),d=require("@nextblock-cms/utils"),o=require("./ProductScopePicker.cjs.js");function n(r){if(!r)return"";const i=new Date(r);return Number.isNaN(i.getTime())?"":i.toISOString().slice(0,16)}function u(r,i){const s=d.getCurrencyMinorUnitFactor(i)===1?0:2;return r.toFixed(s)}function m(r,i){return r?.discount_amount?r.discount_type==="fixed"?u(d.minorUnitAmountToMajor(r.discount_amount,i),i):r.discount_amount:10}function p({action:r,products:i,coupon:s,selectedProductIds:l=[],submitLabel:c,currencyCode:a="USD"}){return e.jsxs("form",{action:r,children:[e.jsx("input",{type:"hidden",name:"currency_code",value:a}),e.jsxs(t.Card,{children:[e.jsx(t.CardHeader,{children:e.jsx(t.CardTitle,{children:s?.id?"Edit Coupon":"Create Coupon"})}),e.jsxs(t.CardContent,{className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"coupon-code",children:"Code"}),e.jsx(t.Input,{id:"coupon-code",name:"code",defaultValue:s?.code||"",className:"uppercase",required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"coupon-name",children:"Name"}),e.jsx(t.Input,{id:"coupon-name",name:"name",defaultValue:s?.name||"",required:!0})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"provider-scope",children:"Provider scope"}),e.jsxs("select",{id:"provider-scope",name:"provider_scope",defaultValue:s?.provider_scope||"all",className:"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"all",children:"Stripe + Freemius"}),e.jsx("option",{value:"stripe",children:"Stripe only"}),e.jsx("option",{value:"freemius",children:"Freemius only"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"discount-type",children:"Discount type"}),e.jsxs("select",{id:"discount-type",name:"discount_type",defaultValue:s?.discount_type||"percent",className:"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"percent",children:"Percent"}),e.jsx("option",{value:"fixed",children:"Fixed amount"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"discount-amount",children:"Amount"}),e.jsx(t.Input,{id:"discount-amount",name:"discount_amount",type:"number",min:"0.01",step:"0.01",defaultValue:m(s,a),required:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Percent coupons use 1-100. Fixed coupons use regular amounts, for example $10.00."})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"starts-at",children:"Starts at"}),e.jsx(t.Input,{id:"starts-at",name:"starts_at",type:"datetime-local",defaultValue:n(s?.starts_at)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"ends-at",children:"Ends at"}),e.jsx(t.Input,{id:"ends-at",name:"ends_at",type:"datetime-local",defaultValue:n(s?.ends_at)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"redemption-limit",children:"Redemption limit"}),e.jsx(t.Input,{id:"redemption-limit",name:"redemption_limit",type:"number",min:"1",defaultValue:s?.redemption_limit||""})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"internal-note",children:"Internal note"}),e.jsx(t.Textarea,{id:"internal-note",name:"internal_note",defaultValue:s?.internal_note||"",rows:3})]}),e.jsxs("div",{className:"rounded-lg border bg-muted/20 p-4",children:[e.jsx("input",{type:"hidden",name:"is_active",value:"false"}),e.jsxs("label",{htmlFor:"coupon-active",className:"flex cursor-pointer items-start gap-3",children:[e.jsx("input",{id:"coupon-active",name:"is_active",type:"checkbox",value:"true",defaultChecked:s?.is_active??!0,className:"mt-0.5 h-4 w-4 rounded border-slate-300 text-primary focus:ring-primary"}),e.jsxs("span",{children:[e.jsx("span",{className:"block text-sm font-medium",children:"Active"}),e.jsx("span",{className:"block text-sm text-muted-foreground",children:"Active coupons can be applied by shoppers during cart and checkout."})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold",children:"Product scope"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Leave every product unchecked to apply this coupon to all products in the selected provider scope."})]}),e.jsx(o.ProductScopePicker,{products:i,selectedProductIds:l})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(t.Button,{type:"submit",children:c})})]})]})]})}exports.CouponEditorForm=p;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("next/link"),r=require("@nextblock-cms/ui"),p=require("@nextblock-cms/db/server"),u=require("lucide-react"),h=require("@nextblock-cms/utils"),d=require("./actions.cjs.js"),f=require("./CreateCouponDialog.cjs.js"),j=require("./product-options.cjs.js");function y(t,n){return t.discount_type==="percent"?`${t.discount_amount}%`:h.formatPrice(t.discount_amount,n)}function g(t,n){return n?t==="synced"||t==="not_required"?"default":"secondary":"outline"}function v(t,n){const i=new Set;for(const c of t||[]){const a=c.product_id;a&&i.add(n.get(a)||a)}return i.size}function _(t,n){const i=v(t,n);return i===0?"All eligible products":`${i} scoped SKU${i===1?"":"s"}`}async function N({searchParams:t}){const n=p.getServiceRoleSupabaseClient();let i=n.from("coupons").select(`
|
|
2
|
-
*,
|
|
3
|
-
coupon_products(product_id),
|
|
4
|
-
coupon_freemius_mappings(sync_status, sync_error)
|
|
5
|
-
`).order("created_at",{ascending:!1});t?.q&&(i=i.or(`code.ilike.%${t.q}%,name.ilike.%${t.q}%`)),t?.status==="active"?i=i.eq("is_active",!0):t?.status==="inactive"&&(i=i.eq("is_active",!1));const[{data:c},{data:a},{data:l}]=await Promise.all([i,n.from("products").select("id, title, sku, payment_provider, freemius_product_id, language:languages(code, name), product_media(sort_order, media(file_path, object_key))").order("title",{ascending:!0}),n.from("currencies").select("code, is_default").eq("is_active",!0)]),o=l?.find(s=>s.is_default)?.code||l?.[0]?.code||"USD",x=new Map((a||[]).map(s=>[s.id,s.sku?.trim().toUpperCase()||s.id]));return e.jsxs("div",{className:"mx-auto w-full max-w-7xl space-y-6 px-6 py-8",children:[e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-end md:justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Coupons"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Create provider-aware discounts for Stripe checkout and Freemius licenses."})]}),e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[e.jsxs("form",{className:"flex gap-2",action:"/cms/coupons",children:[e.jsx("input",{name:"q",placeholder:"Search coupons",defaultValue:t?.q||"",className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm"}),e.jsxs("select",{name:"status",defaultValue:t?.status||"all",className:"h-10 rounded-md border border-input bg-background px-3 py-2 text-sm",children:[e.jsx("option",{value:"all",children:"All"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"inactive",children:"Inactive"})]}),e.jsx(r.Button,{type:"submit",variant:"outline",children:"Filter"})]}),e.jsx(f.CreateCouponDialog,{action:d.createCouponAction,products:j.normalizeCouponProductOptions(a),currencyCode:o})]})]}),e.jsxs(r.Card,{children:[e.jsxs(r.CardHeader,{children:[e.jsx(r.CardTitle,{children:"All Coupons"}),e.jsx(r.CardDescription,{children:"Freemius sync runs when a coupon is created, updated, toggled, or manually resynced."})]}),e.jsx(r.CardContent,{children:e.jsx("div",{className:"overflow-hidden rounded-lg border",children:e.jsxs("table",{className:"w-full text-left text-sm",children:[e.jsx("thead",{className:"border-b bg-muted/40 text-xs uppercase text-muted-foreground",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3",children:"Code"}),e.jsx("th",{className:"px-4 py-3",children:"Scope"}),e.jsx("th",{className:"px-4 py-3",children:"Discount"}),e.jsx("th",{className:"px-4 py-3",children:"Usage"}),e.jsx("th",{className:"px-4 py-3",children:"Sync"}),e.jsx("th",{className:"px-4 py-3 text-right",children:"Actions"})]})}),e.jsx("tbody",{className:"divide-y",children:c?.length?c.map(s=>e.jsxs("tr",{className:"align-top",children:[e.jsxs("td",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono font-semibold",children:s.code}),e.jsx(r.Badge,{variant:s.is_active?"default":"outline",children:s.is_active?"Active":"Inactive"})]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:s.name})]}),e.jsxs("td",{className:"px-4 py-3",children:[e.jsx("span",{className:"capitalize",children:s.provider_scope}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:_(s.coupon_products,x)})]}),e.jsx("td",{className:"px-4 py-3 font-medium",children:y(s,o)}),e.jsxs("td",{className:"px-4 py-3",children:[s.redemptions_count||0,s.redemption_limit?` / ${s.redemption_limit}`:""]}),e.jsxs("td",{className:"px-4 py-3",children:[e.jsx(r.Badge,{variant:g(s.freemius_sync_status,s.is_active),children:s.freemius_sync_status}),s.freemius_sync_error?e.jsx("p",{className:"mt-1 max-w-[220px] text-xs text-destructive",children:s.freemius_sync_error}):null]}),e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsx(r.Button,{asChild:!0,variant:"outline",size:"sm",children:e.jsx(m,{href:`/cms/coupons/${s.id}/edit`,children:"Edit"})}),e.jsx("form",{action:async()=>{"use server";await d.toggleCouponActiveAction(s.id,!s.is_active)},children:e.jsx(r.Button,{type:"submit",variant:"outline",size:"sm",children:s.is_active?"Disable":"Enable"})}),e.jsx("form",{action:async()=>{"use server";await d.syncCouponAction(s.id)},children:e.jsx(r.Button,{type:"submit",variant:"ghost",size:"icon",title:"Resync Freemius","aria-label":`Resync Freemius coupon ${s.code}`,children:e.jsx(u.RefreshCw,{className:"h-4 w-4"})})}),e.jsx("form",{action:async()=>{"use server";await d.deleteCouponAction(s.id)},children:e.jsx(r.Button,{type:"submit",variant:"ghost",size:"icon",className:"text-destructive","aria-label":`Delete coupon ${s.code}`,children:e.jsx(u.Trash2,{className:"h-4 w-4"})})})]})})]},s.id)):e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"px-4 py-10 text-center text-muted-foreground",children:"No coupons yet."})})})]})})})]})]})}exports.CouponsPage=N;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("react"),i=require("@nextblock-cms/ui/button"),o=require("@nextblock-cms/ui/dialog"),u=require("lucide-react"),c=require("./CouponEditorForm.cjs.js");function x({action:t,products:r,currencyCode:a}){const[n,s]=l.useState(!1);return e.jsxs(o.Dialog,{open:n,onOpenChange:s,children:[e.jsx(o.DialogTrigger,{asChild:!0,children:e.jsxs(i.Button,{type:"button",className:"gap-2",children:[e.jsx(u.Plus,{className:"h-4 w-4"}),"Create Coupon"]})}),e.jsxs(o.DialogContent,{className:"max-h-[90vh] overflow-y-auto sm:max-w-[92vw] lg:max-w-5xl xl:max-w-6xl",children:[e.jsx(o.DialogHeader,{children:e.jsx(o.DialogTitle,{className:"sr-only",children:"Create Coupon"})}),e.jsx(c.CouponEditorForm,{action:t,products:r,submitLabel:"Create Coupon",currencyCode:a})]})]})}exports.CreateCouponDialog=x;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("next/link"),p=require("next/navigation"),m=require("@nextblock-cms/ui"),f=require("@nextblock-cms/db/server"),x=require("./actions.cjs.js"),g=require("./CouponEditorForm.cjs.js"),C=require("./product-options.cjs.js");async function _({params:n}){const{id:o}=await n,t=f.getServiceRoleSupabaseClient(),[{data:s},{data:c},{data:u},{data:i}]=await Promise.all([t.from("coupons").select("*").eq("id",o).single(),t.from("products").select("id, title, sku, payment_provider, freemius_product_id, language:languages(code, name), product_media(sort_order, media(file_path, object_key))").order("title",{ascending:!0}),t.from("coupon_products").select("product_id").eq("coupon_id",o),t.from("currencies").select("code, is_default").eq("is_active",!0)]);s||p.notFound();const d=(u||[]).map(r=>r.product_id),a=i?.find(r=>r.is_default)?.code||i?.[0]?.code||"USD";return e.jsxs("div",{className:"mx-auto w-full max-w-5xl space-y-6 px-6 py-8",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Edit Coupon"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Changes are resynced to Freemius after saving."})]}),e.jsx(m.Button,{asChild:!0,variant:"outline",children:e.jsx(l,{href:"/cms/coupons",children:"Back to coupons"})})]}),e.jsx(g.CouponEditorForm,{action:x.updateCouponAction.bind(null,o),products:C.normalizeCouponProductOptions(c),coupon:s,selectedProductIds:d,submitLabel:"Save Coupon",currencyCode:a})]})}exports.EditCouponPage=_;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),p=require("@nextblock-cms/ui/button"),j=require("@nextblock-cms/ui/input"),y=require("lucide-react");function k(s){const r=s.sku?.trim();return r?r.toUpperCase():`PRODUCT:${s.id}`}function v(s){const r=new Map;for(const o of s){const c=k(o),i=r.get(c);if(i){i.productIds.push(o.id);continue}r.set(c,{key:c,title:o.title,sku:o.sku?.trim()||"No SKU",thumbnailUrl:o.thumbnailUrl??null,productIds:[o.id]})}return[...r.values()]}function S({products:s,selectedProductIds:r=[]}){const o=a.useMemo(()=>new Set(r),[r]),[c,i]=a.useState(o),[u,b]=a.useState(""),d=a.useMemo(()=>v(s),[s]),h=a.useMemo(()=>{const t=u.trim().toLowerCase();return t?d.filter(n=>[n.title,n.sku].some(l=>l.toLowerCase().includes(t))):d},[d,u]),x=t=>{i(new Set(s.filter(n=>n.payment_provider===t).map(n=>n.id)))};return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(p.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>i(new Set(s.map(t=>t.id))),children:"Select All"}),e.jsx(p.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>x("stripe"),children:"Stripe"}),e.jsx(p.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>x("freemius"),children:"Freemius"})]}),e.jsxs("div",{className:"relative",children:[e.jsx(y.Search,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(j.Input,{type:"search",value:u,onChange:t=>b(t.target.value),placeholder:"Search products by title or SKU",className:"pl-9"})]}),e.jsxs("div",{className:"grid max-h-[420px] gap-2 overflow-y-auto rounded-lg border p-3 md:grid-cols-2",children:[h.map(t=>{const n=t.productIds.some(l=>c.has(l));return e.jsxs("label",{className:"flex cursor-pointer items-center gap-3 rounded-md px-2 py-2 hover:bg-muted/40",children:[e.jsx("input",{type:"checkbox",checked:n,onChange:l=>{const m=new Set(c);for(const f of t.productIds)l.target.checked?m.add(f):m.delete(f);i(m)},className:"mt-0.5 h-4 w-4 rounded border-slate-300 text-primary focus:ring-primary"}),n?t.productIds.map(l=>e.jsx("input",{type:"hidden",name:"product_ids",value:l},l)):null,e.jsx("span",{className:"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-md border bg-muted",children:t.thumbnailUrl?e.jsx("img",{src:t.thumbnailUrl,alt:"",loading:"lazy",className:"h-full w-full object-cover"}):e.jsx(y.ImageIcon,{className:"h-5 w-5 text-muted-foreground","aria-hidden":"true"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block whitespace-normal break-words text-sm font-medium",children:t.title}),e.jsx("span",{className:"block font-mono text-xs text-muted-foreground",children:t.sku})]})]},t.key)}),h.length===0?e.jsx("div",{className:"px-2 py-8 text-center text-sm text-muted-foreground md:col-span-2",children:"No matching products."}):null]})]})}exports.ProductScopePicker=S;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("@nextblock-cms/db/server"),w=require("@nextblock-cms/utils"),c=require("next/cache"),g=require("next/navigation"),C=require("../../../coupons.cjs.js"),s=require("../../../freemius-coupons.cjs.js");async function u(){const e=l.createClient(),{data:{user:o}}=await e.auth.getUser();if(!o)throw new Error("Unauthorized");const{data:t}=await e.from("profiles").select("role").eq("id",o.id).single();if(t?.role!=="ADMIN")throw new Error("Forbidden");return l.getServiceRoleSupabaseClient()}function i(e){return(typeof e=="string"?e.trim():"")||null}function m(e){const o=i(e);if(!o)return null;const t=new Date(o);return Number.isNaN(t.getTime())?null:t.toISOString()}function h(e){const o=i(e.value),t=o?Number.parseFloat(o):Number.NaN;if(!Number.isFinite(t)||t<=0)throw new Error("Discount amount must be greater than zero.");return e.discountType==="fixed"?w.majorUnitAmountToMinor(t,e.currencyCode):Math.round(t)}function v(e,o){return e.getAll(o).some(t=>t==="true")}function f(e){const o=C.normalizeCouponCode(i(e.get("code"))),t=i(e.get("name")),n=i(e.get("provider_scope"))||"all",r=i(e.get("discount_type"))||"percent",y=w.normalizeCurrencyCode(i(e.get("currency_code"))),a=h({value:e.get("discount_amount"),discountType:r,currencyCode:y}),d=i(e.get("redemption_limit"));if(!o)throw new Error("Coupon code is required.");if(!t)throw new Error("Coupon name is required.");if(r==="percent"&&a>100)throw new Error("Percent discounts cannot exceed 100.");return{coupon:{code:o,name:t,internal_note:i(e.get("internal_note")),provider_scope:n,discount_type:r,discount_amount:a,is_active:v(e,"is_active"),starts_at:m(e.get("starts_at")),ends_at:m(e.get("ends_at")),redemption_limit:d?Number.parseInt(d,10):null,freemius_sync_status:n==="stripe"?"not_required":"pending",freemius_sync_error:null},productIds:e.getAll("product_ids").map(p=>typeof p=="string"?p.trim():"").filter(Boolean)}}async function _(e){if(await e.client.from("coupon_products").delete().eq("coupon_id",e.couponId),e.productIds.length===0)return;const{error:o}=await e.client.from("coupon_products").insert(e.productIds.map(t=>({coupon_id:e.couponId,product_id:t})));if(o)throw new Error(o.message)}async function A(e){const o=await u(),t=f(e),{data:n,error:r}=await o.from("coupons").insert(t.coupon).select("id").single();if(r||!n)throw new Error(r?.message||"Failed to create coupon.");await _({client:o,couponId:n.id,productIds:t.productIds}),await s.syncCouponToFreemius({couponId:n.id,client:o}),c.revalidatePath("/cms/coupons"),g.redirect("/cms/coupons")}async function q(e,o){const t=await u(),n=f(o),{error:r}=await t.from("coupons").update(n.coupon).eq("id",e);if(r)throw new Error(r.message);await _({client:t,couponId:e,productIds:n.productIds}),n.coupon.provider_scope==="stripe"?await s.deleteCouponFromFreemius({couponId:e,client:t}):await s.syncCouponToFreemius({couponId:e,client:t}),c.revalidatePath("/cms/coupons"),c.revalidatePath(`/cms/coupons/${e}/edit`),g.redirect("/cms/coupons")}async function b(e,o){const t=await u(),{error:n}=await t.from("coupons").update({is_active:o,freemius_sync_status:"pending",updated_at:new Date().toISOString()}).eq("id",e);if(n)throw new Error(n.message);await s.syncCouponToFreemius({couponId:e,client:t}),c.revalidatePath("/cms/coupons")}async function F(e){const o=await u();await s.syncCouponToFreemius({couponId:e,client:o}),c.revalidatePath("/cms/coupons"),c.revalidatePath(`/cms/coupons/${e}/edit`)}async function E(e){const o=await u();await s.deleteCouponFromFreemius({couponId:e,client:o});const{error:t}=await o.from("coupons").delete().eq("id",e);if(t)throw new Error(t.message);c.revalidatePath("/cms/coupons")}exports.createCouponAction=A;exports.deleteCouponAction=E;exports.syncCouponAction=F;exports.toggleCouponActiveAction=b;exports.updateCouponAction=q;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function u(r){return Array.isArray(r)?r[0]??null:r??null}const i=process.env.NEXT_PUBLIC_R2_BASE_URL||"";function l(r){return r?r.startsWith("http")||!i?r:`${i.replace(/\/+$/,"")}/${r.replace(/^\/+/,"")}`:null}function a(r){const e=Array.isArray(r.product_media)?[...r.product_media].sort((t,o)=>(t.sort_order??0)-(o.sort_order??0)):[],n=e[0]?.media?.file_path||e[0]?.media?.object_key||null;return l(n)}function s(r){return(r||[]).map(e=>({id:e.id,title:e.title,sku:e.sku??null,payment_provider:e.payment_provider||"stripe",freemius_product_id:e.freemius_product_id??null,thumbnailUrl:a(e),language:u(e.language)}))}exports.normalizeCouponProductOptions=s;
|