@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 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),t=require("@nextblock-cms/ui"),r=require("lucide-react"),l=require("sonner"),b=require("./export-actions.cjs.js"),c=require("../../../export-helpers.cjs.js");function D(){const[g,p]=s.useState(!1),[x,d]=s.useState(!1),[n,m]=s.useState(""),[o,h]=s.useState(""),[u,j]=s.useState("general_ledger"),y=async()=>{if(!n||!o){l.toast.error("Please select both start and end dates");return}d(!0);try{l.toast.info("Generating report...");const a=await b.fetchOrderReportData(n,o);if(!a||a.length===0){l.toast.error("No orders found for the selected date range"),d(!1);return}let i=[];const f=`report_${u}_${n}_to_${o}`;switch(u){case"general_ledger":i=c.mapGeneralSalesLedger(a);break;case"tax_liability":i=c.mapTaxLiabilitySummary(a);break;case"currency_summary":i=c.mapMultiCurrencyRevenue(a);break}c.generateCSV(i,`${f}.csv`),l.toast.success("Download complete!"),p(!1)}catch(a){console.error("Export error:",a),l.toast.error("Failed to generate report")}finally{d(!1)}};return e.jsxs(t.Dialog,{open:g,onOpenChange:p,children:[e.jsx(t.DialogTrigger,{asChild:!0,children:e.jsxs(t.Button,{variant:"outline",className:"flex items-center gap-2",children:[e.jsx(r.Download,{className:"h-4 w-4"}),"Export Reports"]})}),e.jsxs(t.DialogContent,{className:"sm:max-w-[425px]",children:[e.jsxs(t.DialogHeader,{children:[e.jsxs(t.DialogTitle,{className:"flex items-center gap-2",children:[e.jsx(r.FileDown,{className:"h-5 w-5 text-blue-600"}),"Accounting Reports"]}),e.jsx(t.DialogDescription,{children:"Generate and download accountant-friendly order reports."})]}),e.jsxs("div",{className:"grid gap-6 py-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t.Label,{htmlFor:"start-date",className:"text-xs font-semibold uppercase text-gray-500 tracking-wider",children:"Start Date"}),e.jsxs("div",{className:"relative",children:[e.jsx(t.Input,{id:"start-date",type:"date",value:n,onChange:a=>m(a.target.value),className:"pl-8"}),e.jsx(r.Calendar,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-gray-400"})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t.Label,{htmlFor:"end-date",className:"text-xs font-semibold uppercase text-gray-500 tracking-wider",children:"End Date"}),e.jsxs("div",{className:"relative",children:[e.jsx(t.Input,{id:"end-date",type:"date",value:o,onChange:a=>h(a.target.value),className:"pl-8"}),e.jsx(r.Calendar,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-gray-400"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t.Label,{htmlFor:"report-type",className:"text-xs font-semibold uppercase text-gray-500 tracking-wider",children:"Report Type"}),e.jsxs(t.Select,{value:u,onValueChange:a=>j(a),children:[e.jsx(t.SelectTrigger,{id:"report-type",className:"w-full",children:e.jsx(t.SelectValue,{placeholder:"Select report type"})}),e.jsxs(t.SelectContent,{children:[e.jsx(t.SelectItem,{value:"general_ledger",children:"General Sales Ledger"}),e.jsx(t.SelectItem,{value:"tax_liability",children:"Tax Liability Summary"}),e.jsx(t.SelectItem,{value:"currency_summary",children:"Multi-Currency Revenue Summary"})]})]})]})]}),e.jsx(t.DialogFooter,{children:e.jsx(t.Button,{onClick:y,disabled:x,className:"w-full bg-blue-600 hover:bg-blue-700 text-white",children:x?e.jsxs(e.Fragment,{children:[e.jsx(r.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Generating..."]}):e.jsxs(e.Fragment,{children:[e.jsx(r.Download,{className:"mr-2 h-4 w-4"}),"Download Report"]})})})]})]})}exports.ExportReportsDialog=D;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("next/link"),x=require("next/navigation"),m=require("../../../components/InvoiceViewerShell.cjs.js"),u=require("../../../invoice-server.cjs.js"),p=require("../../../invoice-ui.cjs.js"),g=require("./actions.cjs.js"),b=require("./OrderPrintButton.cjs.js"),h=require("./OrderStatusForm.cjs.js"),i=(a,r="usd")=>new Intl.NumberFormat("en-US",{style:"currency",currency:r}).format(a/100);async function f({params:a}){const{id:r}=await a,[t,s]=await Promise.all([g.getOrderDetails(r),u.getInvoicePresentationData(r).catch(()=>null)]);t||x.notFound();const l=s?.order.customer_details??t.customer_details,d=p.buildInvoiceDocumentLabels(c=>c);return e.jsxs("div",{className:"mx-auto w-full max-w-6xl px-4 py-10 md:px-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 border-b pb-6 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2 text-sm text-gray-500",children:[e.jsx(o,{href:"/cms/orders",className:"hover:underline",children:"Orders"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:"font-mono",children:t.id})]}),e.jsxs("h1",{className:"flex flex-wrap items-center gap-3 text-3xl font-bold tracking-tight",children:["Order",e.jsx(y,{status:t.status,size:"lg"})]}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:"Review the finalized invoice, customer details, and payment metadata in one place."})]}),e.jsx("div",{className:"w-full max-w-md",children:e.jsx(h.OrderStatusForm,{orderId:r,currentStatus:t.status})})]}),e.jsxs("div",{className:"mt-6 grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-lg border bg-white p-4 dark:border-slate-800 dark:bg-slate-900",children:[e.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:"Customer"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[l?.name?e.jsx("p",{className:"font-semibold text-gray-900 dark:text-white",children:l.name}):null,l?.email?e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:l.email}):null,l?.phone?e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:l.phone}):null,!l?.name&&!l?.email&&!l?.phone?e.jsx("p",{className:"italic text-gray-400",children:"No contact info captured."}):null,t.user_id?e.jsxs("p",{className:"pt-1 font-mono text-[10px] uppercase tracking-wider text-gray-400",children:["User ID: ",t.user_id.slice(0,13),"..."]}):null]})]}),e.jsxs("div",{className:"rounded-lg border bg-white p-4 dark:border-slate-800 dark:bg-slate-900",children:[e.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:"Payment Details"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsx(n,{label:"Provider",value:t.provider||"stripe",capitalize:!0}),e.jsx(n,{label:"Currency",value:(t.currency||"usd").toUpperCase()}),e.jsx(n,{label:"Created",value:new Date(t.created_at||"").toLocaleDateString()}),e.jsx(n,{label:"Invoice #",value:s?.order.invoice_number||"Pending assignment"}),e.jsx(n,{label:"Paid on",value:s?.order.paid_at?new Date(s.order.paid_at).toLocaleString():"Pending payment"}),e.jsx(n,{label:"Total",value:typeof t.total=="number"?i(t.total,t.currency||"usd"):"--"}),t.discount_total?e.jsx(n,{label:"Discount",value:`${t.coupon_code?`${t.coupon_code} `:""}-${i(t.discount_total,t.currency||"usd")}`}):null,t.stripe_session_id?e.jsxs("div",{className:"mt-3 border-t pt-3 dark:border-slate-800",children:[e.jsx("p",{className:"mb-1 text-xs text-gray-500",children:"Session ID"}),e.jsx("p",{className:"break-all rounded bg-gray-50 p-1 font-mono text-xs dark:bg-slate-800",children:t.stripe_session_id})]}):null]})]})]}),e.jsx("div",{className:"mt-6 flex justify-end print:hidden",children:e.jsx(b.OrderPrintButton,{disabled:!s})}),e.jsx(m.InvoiceViewerShell,{invoice:s,labels:d,locale:"en-US",title:s?.order.invoice_number||"Order invoice",description:"Open the printable invoice below and update the order status whenever you need to.",printLabel:"Print / Save as PDF",action:{href:"/cms/orders",label:"Back to orders",variant:"outline"},emptyMessage:"The printable invoice will appear here after the order payment metadata is synced.",className:"max-w-none px-0 py-6 md:px-0",showHeader:!1})]})}function n({label:a,value:r,capitalize:t=!1}){return e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{className:"text-gray-500",children:a}),e.jsx("span",{className:t?"capitalize font-medium":"font-medium",children:r})]})}function y({status:a,size:r="md"}){let t="bg-gray-100 text-gray-700 dark:bg-slate-800 dark:text-gray-300";a==="paid"&&(t="bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"),a==="trial"&&(t="bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"),a==="pending"&&(t="bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"),a==="shipped"&&(t="bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"),a==="cancelled"&&(t="bg-slate-200 text-slate-700 dark:bg-slate-800 dark:text-slate-300"),a==="refunded"&&(t="bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"),a==="failed"&&(t="bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400");const s=r==="lg"?"px-3 py-1 text-sm":"px-2 py-0.5 text-xs";return e.jsx("span",{className:`${s} rounded-full font-medium capitalize ${t}`,children:a})}exports.OrderDetailPage=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("lucide-react"),n=require("@nextblock-cms/ui");function i({disabled:e=!1}){return t.jsxs(n.Button,{type:"button",variant:"outline",onClick:()=>window.print(),disabled:e,children:[t.jsx(r.Printer,{className:"mr-2 h-4 w-4"}),"Print / Save as PDF"]})}exports.OrderPrintButton=i;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),v=require("next/navigation"),s=require("@nextblock-cms/ui"),S=require("./server-actions.cjs.js"),u=[{value:"pending",label:"Pending"},{value:"trial",label:"Trial"},{value:"paid",label:"Paid"},{value:"shipped",label:"Shipped"},{value:"cancelled",label:"Cancelled"},{value:"refunded",label:"Refunded"}];function g({orderId:o,currentStatus:l}){const x=v.useRouter(),[a,m]=n.useState(u.some(t=>t.value===l)?l:"pending"),[i,r]=n.useState(null),[c,h]=n.useTransition(),d=n.useMemo(()=>a!==l,[l,a]),p=()=>{d&&(r(null),h(async()=>{try{const t=await S.updateOrderStatus(o,a);if(!t.success){r(t.error||"Failed to update order status.");return}x.refresh()}catch(t){console.error(t),r("Unexpected error while saving the order status.")}}))};return e.jsxs("div",{className:"rounded-lg border bg-white p-4 dark:border-slate-800 dark:bg-slate-900",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end",children:[e.jsxs("div",{className:"min-w-[220px] flex-1 space-y-2",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500",children:"Order Status"}),e.jsxs(s.Select,{value:a,onValueChange:t=>{m(t),r(null)},children:[e.jsx(s.SelectTrigger,{children:e.jsx(s.SelectValue,{placeholder:"Select status"})}),e.jsx(s.SelectContent,{children:u.map(t=>e.jsx(s.SelectItem,{value:t.value,children:t.label},t.value))})]})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(s.Button,{type:"button",onClick:p,disabled:c||!d,children:c?"Saving...":"Save"})})]}),i?e.jsx("p",{className:"mt-2 text-xs text-red-600 dark:text-red-400",children:i}):d?null:e.jsx("p",{className:"mt-2 text-xs text-slate-500",children:"Status is already up to date."})]})}exports.OrderStatusForm=g;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("next/link"),m=require("./actions.cjs.js"),g=require("./ExportReportsDialog.cjs.js"),x=(s,a="usd")=>new Intl.NumberFormat("en-US",{style:"currency",currency:a}).format(s/100);async function p({searchParams:s}){const a=await s,r=Number(a.page)||1,l=a.status||"all",{data:c,totalPages:i}=await m.getOrders(r,l);return e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Orders"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g.ExportReportsDialog,{}),e.jsx(d,{href:`/cms/orders?page=${r}&status=${l}`,className:"px-3 py-2 text-sm font-medium border rounded hover:bg-gray-50 dark:hover:bg-slate-800",children:"Refresh"})]})]}),e.jsx("div",{className:"flex gap-2 border-b pb-4",children:["all","paid","trial","pending","failed"].map(t=>e.jsx(d,{href:`/cms/orders?page=1&status=${t}`,className:`px-3 py-1 rounded-full text-sm font-medium capitalize ${l===t?"bg-black text-white dark:bg-white dark:text-black":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-slate-800 dark:text-gray-300 dark:hover:bg-slate-700"}`,children:t},t))}),e.jsx("div",{className:"border rounded-lg overflow-hidden dark:border-slate-800",children:e.jsxs("table",{className:"w-full text-sm text-left align-middle",children:[e.jsx("thead",{className:"bg-gray-50 text-gray-500 font-medium border-b dark:bg-slate-900 dark:text-slate-400 dark:border-slate-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3",children:"ID"}),e.jsx("th",{className:"px-4 py-3",children:"Customer"}),e.jsx("th",{className:"px-4 py-3",children:"Status"}),e.jsx("th",{className:"px-4 py-3",children:"Provider"}),e.jsx("th",{className:"px-4 py-3 text-right",children:"Amount"}),e.jsx("th",{className:"px-4 py-3 text-right",children:"Date"}),e.jsx("th",{className:"px-4 py-3 text-right",children:"Actions"})]})}),e.jsx("tbody",{className:"divide-y dark:divide-slate-800",children:c.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"px-4 py-8 text-center text-gray-500",children:"No orders found."})}):c.map(t=>{const n=t.customer_details,o=n?.name||n?.email||t.customer?.full_name||"Guest Customer";return e.jsxs("tr",{className:"hover:bg-gray-50 dark:hover:bg-slate-800/50",children:[e.jsxs("td",{className:"px-4 py-3 font-mono text-gray-500",children:[t.id.slice(0,8),"..."]}),e.jsx("td",{className:"px-4 py-3 font-medium",children:o}),e.jsx("td",{className:"px-4 py-3",children:e.jsx(h,{status:t.status})}),e.jsx("td",{className:"px-4 py-3 capitalize text-gray-600 dark:text-gray-400",children:t.provider==="freemius"?"Freemius":"Stripe"}),e.jsx("td",{className:"px-4 py-3 text-right",children:e.jsxs("div",{className:"flex flex-col items-end",children:[e.jsx("span",{children:x(t.total,t.currency||"usd")}),t.discount_total?e.jsxs("span",{className:"text-[10px] text-emerald-600",children:[t.coupon_code," -",x(t.discount_total,t.currency||"usd")]}):null]})}),e.jsx("td",{className:"px-4 py-3 text-right text-gray-500 whitespace-nowrap",children:new Date(t.created_at||"").toLocaleDateString()}),e.jsx("td",{className:"px-4 py-3 text-right",children:e.jsx(d,{href:`/cms/orders/${t.id}`,className:"text-blue-600 hover:underline dark:text-blue-400",children:"View"})})]},t.id)})})]})}),e.jsxs("div",{className:"flex justify-between items-center pt-4",children:[e.jsxs("div",{className:"text-sm text-gray-500",children:["Page ",r," of ",i]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{href:`/cms/orders?page=${Math.max(1,r-1)}&status=${l}`,className:`px-3 py-1 border rounded text-sm ${r<=1?"pointer-events-none opacity-50":"hover:bg-gray-50 dark:hover:bg-slate-800"}`,children:"Previous"}),e.jsx(d,{href:`/cms/orders?page=${Math.min(i,r+1)}&status=${l}`,className:`px-3 py-1 border rounded text-sm ${r>=i?"pointer-events-none opacity-50":"hover:bg-gray-50 dark:hover:bg-slate-800"}`,children:"Next"})]})]})]})}function h({status:s}){let a="bg-gray-100 text-gray-700 dark:bg-slate-800 dark:text-gray-300";return s==="paid"&&(a="bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"),s==="trial"&&(a="bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"),s==="pending"&&(a="bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"),s==="failed"&&(a="bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"),e.jsx("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium capitalize ${a}`,children:s})}exports.OrdersPage=p;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@nextblock-cms/db/server"),m=20;async function h(l=1,i,s){const d=await g.createClient(),t=(l-1)*m,n=t+m-1;let o=d.from("orders").select(`
|
|
2
|
-
*,
|
|
3
|
-
order_items (*)
|
|
4
|
-
`,{count:"exact"}).order("created_at",{ascending:!1}).range(t,n);i&&i!=="all"&&(o=o.eq("status",i)),s&&(o=o.or(`id.eq.${s},user_id.eq.${s}`));const{data:u,error:f,count:e}=await o;if(f)throw console.error("Error fetching orders:",f),new Error("Failed to fetch orders");const r=u||[],c=Array.from(new Set(r.map(a=>a.user_id).filter(Boolean))),p=new Map;if(c.length>0){const{data:a,error:w}=await d.from("profiles").select("*").in("id",c);!w&&a&&a.forEach(_=>p.set(_.id,_))}return{data:r.map(a=>({...a,customer:a.user_id?p.get(a.user_id):null})),total:e||0,totalPages:e?Math.ceil(e/m):0}}async function E(l){const i=await g.createClient(),{data:s,error:d}=await i.from("orders").select(`
|
|
5
|
-
*,
|
|
6
|
-
order_items (*)
|
|
7
|
-
`).eq("id",l).single();if(d||!s)return console.error(`Error fetching order ${l}:`,d),null;const t=s;let n=null;if(t.user_id){const{data:e}=await i.from("profiles").select("*").eq("id",t.user_id).single();n=e}const o=t.order_items.map(e=>e.product_id).filter(Boolean),u=new Map;if(o.length>0){const{data:e}=await i.from("products").select("id, title, slug, product_media(media(file_path))").in("id",o);e&&e.forEach(r=>{let c=null;r.product_media&&r.product_media.length>0&&r.product_media[0].media&&(c=r.product_media[0].media.file_path),u.set(r.id,{title:r.title,slug:r.slug,image_url:c})})}const f=t.order_items.map(e=>({...e,product:e.product_id?u.get(e.product_id):null}));return{...t,order_items:f,customer:n}}exports.getOrderDetails=E;exports.getOrders=h;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("@nextblock-cms/db/server");async function f(o,s){const i=l.createClient();let r=i.from("orders").select("*, order_items(*)");if(o&&(r=r.gte("created_at",o)),s){const e=new Date(s);e.setHours(23,59,59,999),r=r.lte("created_at",e.toISOString())}const{data:t,error:a}=await r.order("created_at",{ascending:!0});if(a)throw console.error("Error fetching report data:",a),new Error(`Failed to fetch report data: ${a.message}`);if(!t||t.length===0)return[];const n=Array.from(new Set(t.map(e=>e.user_id).filter(Boolean))),c=new Map;if(n.length>0){const{data:e}=await i.from("profiles").select("id, full_name, email").in("id",n);e&&e.forEach(d=>c.set(d.id,d))}return t.map(e=>({...e,customer:e.user_id?c.get(e.user_id):null}))}exports.fetchOrderReportData=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@nextblock-cms/db/server"),u=require("@supabase/supabase-js"),c=require("../../../order-inventory.cjs.js"),d=require("../../../invoice-server.cjs.js"),l=["pending","trial","paid","shipped","cancelled","refunded"];async function f(){const r=i.createClient(),{data:{user:e},error:t}=await r.auth.getUser();if(t||!e)return{error:"Unauthorized"};const{data:s,error:a}=await r.from("profiles").select("role").eq("id",e.id).single();return a||!s||!["ADMIN","WRITER"].includes(s.role)?{error:"Forbidden"}:{supabase:r,user:e}}function p(){const r=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY,e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL;if(!r||!e)throw new Error("Server configuration error");return u.createClient(e,r,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function E(r,e){const t=await f();if("error"in t)return{success:!1,error:t.error};if(!l.includes(e))return{success:!1,error:"Invalid order status"};let s;try{s=p()}catch(n){return{success:!1,error:n instanceof Error?n.message:"Server configuration error"}}const{data:a,error:o}=await s.from("orders").update({status:e}).eq("id",r).select();return o?(console.error("Order status update error:",o),{success:!1,error:o.message}):!a||a.length===0?{success:!1,error:"Order not found or update failed."}:(e==="paid"&&(await d.assignInvoiceMetadata({orderId:r,client:s}),await c.applyOrderInventoryDeduction(s,r)),{success:!0})}exports.updateOrderStatus=E;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),N=require("next/navigation"),r=require("@nextblock-cms/ui"),f=require("lucide-react"),k=require("react-dom");function C({initialEnabledProviders:s,configStatus:i,credentials:t,saveAction:a,saveCredentialsAction:o}){const n=N.useRouter(),[m,x]=b.useTransition(),c=i.stripe.hasKeys,p=i.freemius.hasKeys,[u,j]=b.useState(()=>({stripe:s.stripe&&c,freemius:s.freemius&&p}));function g(){const l=new FormData;l.set("stripe_enabled",u.stripe?"true":"false"),l.set("freemius_enabled",u.freemius?"true":"false"),x(async()=>{await a(l),n.refresh()})}return e.jsxs("div",{className:"max-w-7xl space-y-4 p-4 sm:p-6",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Payment Settings"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Enter your provider API keys, then enable the providers your store needs. Physical products use Stripe and digital products use Freemius."})]}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-[minmax(0,3fr)_minmax(20rem,2fr)]",children:[e.jsx(w,{credentials:t,saveAction:o}),e.jsxs(r.Card,{className:"flex h-full flex-col",children:[e.jsxs(r.CardHeader,{className:"pb-3",children:[e.jsx(r.CardTitle,{children:"Payment Providers"}),e.jsx(r.CardDescription,{children:"You can run both providers at the same time. Each product picks its provider from its product type."})]}),e.jsxs(r.CardContent,{className:"flex flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx(y,{id:"stripe-enabled",label:"Stripe for Physical Products",description:"Use Stripe Checkout for physical merchandise and other shippable goods.",checked:u.stripe,disabled:!c,onCheckedChange:l=>j(h=>({...h,stripe:l})),ready:c,children:c?e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-green-600",children:[e.jsx(f.CheckCircle2,{className:"h-4 w-4"}),e.jsx("span",{children:"Ready for physical product checkout"})]}):e.jsx(v,{provider:"Stripe",missingKeys:i.stripe.missing,docsUrl:"https://dashboard.stripe.com/apikeys",docsLabel:"Stripe API keys"})}),e.jsx(y,{id:"freemius-enabled",label:"Freemius for Digital Products",description:"Use Freemius for software licenses, SaaS plans, and other digital products.",checked:u.freemius,disabled:!p,onCheckedChange:l=>j(h=>({...h,freemius:l})),ready:p,children:p?e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-xs text-green-600",children:[e.jsx(f.CheckCircle2,{className:"h-4 w-4"}),e.jsx("span",{children:"Ready for digital product checkout"})]}):e.jsx(v,{provider:"Freemius",missingKeys:i.freemius.missing,docsUrl:"https://dashboard.freemius.com/",docsLabel:"Freemius credentials"})})]}),e.jsx("div",{className:"mt-auto flex justify-end border-t pt-4",children:e.jsx(r.Button,{type:"button",disabled:m,onClick:g,children:m?"Saving...":"Save Changes"})})]})]})]})]})}function S(){const{pending:s}=k.useFormStatus();return e.jsx(r.Button,{type:"submit",disabled:s,children:s?"Saving...":"Save Changes"})}function d({id:s,label:i,type:t="text",defaultValue:a,placeholder:o,hint:n}){return e.jsxs("div",{className:"space-y-1",children:[e.jsx(r.Label,{htmlFor:s,className:"text-xs",children:i}),e.jsx(r.Input,{id:s,name:s,type:t,defaultValue:a,placeholder:o,autoComplete:t==="password"?"new-password":"off"}),n&&e.jsx("p",{className:"text-xs text-muted-foreground",children:n})]})}function w({credentials:s,saveAction:i}){const t="•••••••• (stored — leave blank to keep)";return e.jsxs(r.Card,{className:"flex h-full flex-col",children:[e.jsxs(r.CardHeader,{className:"pb-3",children:[e.jsx(r.CardTitle,{children:"Provider API Keys"}),e.jsxs(r.CardDescription,{children:["Keys are encrypted at rest and used DB-first (these override any"," ",e.jsx("code",{children:".env"})," values). Leave a secret blank to keep the stored value."]})]}),e.jsx(r.CardContent,{className:"flex flex-1 flex-col",children:e.jsxs("form",{action:i,className:"flex flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Stripe (physical products)"}),e.jsxs("details",{className:"rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground",children:[e.jsx("summary",{className:"cursor-pointer font-medium text-foreground",children:"Stripe webhook setup"}),e.jsxs("div",{className:"mt-2 space-y-1.5",children:[e.jsxs("p",{children:["In Stripe, add"," ",e.jsx("code",{children:"https://your-domain/api/webhooks/stripe"})," as a webhook endpoint and paste its ",e.jsx("code",{children:"whsec_…"})," signing secret below."]}),e.jsxs("p",{children:["Locally, run"," ",e.jsx("code",{children:"stripe listen --forward-to localhost:4200/api/webhooks/stripe"})," ","or ",e.jsx("code",{children:"npm run stripe"}),"."]})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsx(d,{id:"stripe_publishableKey",label:"Publishable key",defaultValue:s.stripe.publishableKey,placeholder:"pk_live_…"}),e.jsx(d,{id:"stripe_secretKey",label:"Secret key",type:"password",placeholder:s.stripe.hasSecretKey?t:"sk_live_…"}),e.jsx(d,{id:"stripe_webhookSecret",label:"Webhook signing secret",type:"password",placeholder:s.stripe.hasWebhookSecret?t:"whsec_…"})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Freemius (digital products)"}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[e.jsx(d,{id:"freemius_developerId",label:"Developer ID",defaultValue:s.freemius.developerId}),e.jsx(d,{id:"freemius_productId",label:"Product ID",defaultValue:s.freemius.productId}),e.jsx(d,{id:"freemius_publicKey",label:"Public key",defaultValue:s.freemius.publicKey,placeholder:"pk_…"}),e.jsx(d,{id:"freemius_secretKey",label:"Secret key",type:"password",placeholder:s.freemius.hasSecretKey?t:"sk_…"}),e.jsx(d,{id:"freemius_apiKey",label:"API key",type:"password",placeholder:s.freemius.hasApiKey?t:"API key"})]})]}),s.envFallbackActive&&e.jsx("p",{className:"text-xs text-amber-700",children:"Stripe keys are currently read from environment variables. Saving here moves them into the database and takes precedence."}),e.jsx("div",{className:"mt-auto flex justify-end border-t pt-4",children:e.jsx(S,{})})]})})]})}function y({id:s,label:i,description:t,checked:a,disabled:o,ready:n,onCheckedChange:m,children:x}){return e.jsx("div",{className:"rounded-md border p-3",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(r.Checkbox,{id:s,checked:a,disabled:o,onCheckedChange:c=>m(!!c),className:"mt-1"}),e.jsxs("div",{className:"grid gap-1.5 leading-none w-full",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsx(r.Label,{htmlFor:s,className:"font-semibold text-base cursor-pointer",children:i}),e.jsx("span",{className:`text-xs font-medium ${a?"text-foreground":"text-muted-foreground"}`,children:a?"Enabled":"Disabled"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t}),!n&&e.jsx("p",{className:"text-xs text-amber-700",children:"Add all required credentials before enabling this provider."}),x]})]})})}function v({provider:s,missingKeys:i,docsUrl:t,docsLabel:a}){return e.jsxs("div",{className:"mt-2 rounded-md border border-destructive/20 bg-destructive/5 p-3 text-xs text-foreground",children:[e.jsxs("div",{className:"mb-1.5 flex items-center gap-2 font-semibold text-destructive",children:[e.jsx(f.AlertCircle,{className:"h-4 w-4"}),e.jsx("span",{children:"Configuration Required"})]}),e.jsxs("p",{children:[s," needs ",e.jsx("strong",{children:i.join(", ")}),". Add them in Provider API Keys, save, then enable the provider."," ",e.jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"font-medium underline hover:text-destructive/80",children:["Open ",a]}),"."]})]})}exports.PaymentsClient=C;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),n=require("./actions.cjs.js"),s=require("./queries.cjs.js"),c=require("../../../payment-config.cjs.js"),l=require("./PaymentsClient.cjs.js");async function y(){const[i,e,a]=await Promise.all([s.getEnabledPaymentProviders(),s.getStoreConfigStatus(),c.getPaymentCredentialsView()]);async function r(t){"use server";const o={stripe:t.get("stripe_enabled")==="true"&&e.stripe.hasKeys,freemius:t.get("freemius_enabled")==="true"&&e.freemius.hasKeys};await n.updatePaymentSettings(o)}return u.jsx(l.PaymentsClient,{initialEnabledProviders:i,configStatus:e,credentials:a,saveAction:r,saveCredentialsAction:n.savePaymentProviderCredentials})}exports.PaymentsPage=y;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@nextblock-cms/db/server"),r=require("next/cache"),o=require("../../../payment-config.cjs.js");async function d(){const e=await n.createClient(),{data:{user:t}}=await e.auth.getUser();if(!t)throw new Error("Unauthorized");const{data:i}=await e.from("profiles").select("role").eq("id",t.id).single();if(!i||i.role!=="ADMIN")throw new Error("Forbidden")}async function c(e){await d(),await o.savePaymentCredentials({stripe:{publishableKey:String(e.get("stripe_publishableKey")??""),secretKey:String(e.get("stripe_secretKey")??""),webhookSecret:String(e.get("stripe_webhookSecret")??"")},freemius:{developerId:String(e.get("freemius_developerId")??""),publicKey:String(e.get("freemius_publicKey")??""),productId:String(e.get("freemius_productId")??""),secretKey:String(e.get("freemius_secretKey")??""),apiKey:String(e.get("freemius_apiKey")??"")}}),r.revalidatePath("/cms/payments"),r.revalidatePath("/cms/dashboard"),r.revalidatePath("/","layout")}async function l(e){const t=await n.createClient(),{data:{user:i}}=await t.auth.getUser();if(!i)throw new Error("Unauthorized");const{data:a}=await t.from("profiles").select("role").eq("id",i.id).single();if(!a||a.role!=="ADMIN")throw new Error("Forbidden");const{error:s}=await t.from("site_settings").upsert({key:"enabled_payment_providers",value:e});if(s)throw console.error("Error updating payment providers:",s),new Error("Failed to update settings");return r.revalidatePath("/cms/payments"),r.revalidatePath("/cms/taxes"),r.revalidatePath("/","layout"),{success:!0}}exports.savePaymentProviderCredentials=c;exports.updatePaymentSettings=l;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),m=require("@nextblock-cms/db/server"),i=require("../../../types.cjs.js"),P=require("../../../payment-config.cjs.js");async function u(){return P.getPaymentConfigStatus()}async function a(){const e=m.createClient(),{data:t,error:n}=await e.from("site_settings").select("value").eq("key","enabled_payment_providers").maybeSingle();return n||!t?{...i.DEFAULT_ENABLED_PAYMENT_PROVIDERS}:i.normalizeEnabledPaymentProviders(t.value)}async function l(){const e=await a();return e.stripe?"stripe":e.freemius?"freemius":"stripe"}const f={stripe:"Stripe",freemius:"Freemius"};function o(e,t,n){const r=t[e],{hasKeys:s,missing:g}=n[e];return{provider:e,label:f[e],enabled:r,hasKeys:s,ready:r&&s,missing:s&&!r?["Not enabled in CMS → Payments"]:g}}const c=y.cache(async()=>{const[e,t]=await Promise.all([a(),u()]);return{stripe:o("stripe",e,t),freemius:o("freemius",e,t)}});async function d(e){return(await c())[e]}async function S(e){return d(i.derivePaymentProviderFromProductType(e))}exports.getEnabledPaymentProviders=a;exports.getPaymentSettings=l;exports.getProviderReadiness=d;exports.getReadinessForProductType=S;exports.getStoreConfigStatus=u;exports.getStoreReadiness=c;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),_=require("@nextblock-cms/ui"),h=require("next/link"),y=require("./actions.cjs.js"),q=require("./components/ProductsBulkTable.cjs.js"),w=require("./components/SyncFreemiusButton.cjs.js"),o=require("./server-actions.cjs.js"),u=require("@nextblock-cms/db/server"),l=require("@nextblock-cms/utils/seo");async function A({searchParams:r,languageFilterNode:p,transferControlsNode:g}){const n=u.getServiceRoleSupabaseClient(),[m,{data:i}]=await Promise.all([u.getActiveLanguagesServerSide(),n.from("currencies").select("code, is_default").eq("is_active",!0).order("is_default",{ascending:!1}).order("code",{ascending:!0})]),b=r?.lang?parseInt(r.lang,10):void 0,{data:f}=await y.getProducts({languageId:b}),d=f||[],a=d.map(e=>e.id),{data:P}=a.length>0?await n.from("blocks").select("id, product_id, block_type, content, order").in("product_id",a).order("order",{ascending:!0}):{data:[]},c=new Map;for(const e of P||[]){if(!e.product_id)continue;const s=c.get(e.product_id)||[];s.push(e),c.set(e.product_id,s)}const x=d.map(e=>{const s=c.get(e.id)||[],v=l.buildPageSeoDocument(s,{documentTitle:e.title,documentType:"product"}),j=l.auditSeo({document:v,metaTitle:e.meta_title??void 0,metaDescription:e.meta_description??void 0,scope:"page"});return{...e,seo_score:j.score}}),k=Object.fromEntries(m.map(e=>[String(e.id),e.code.toUpperCase()])),S=i?.find(e=>e.is_default)?.code||i?.[0]?.code||"USD";return t.jsxs("div",{className:"p-8 space-y-6",children:[t.jsxs("div",{className:"flex justify-between items-center",children:[t.jsx("h1",{className:"text-3xl font-bold",children:"Products"}),t.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[t.jsx("div",{className:"h-10 w-[1px] bg-slate-200 dark:bg-slate-800 mx-2 hidden sm:block"}),g,p,t.jsx(w.SyncFreemiusButton,{title:"Sync Full Store"}),t.jsx(h,{href:"/cms/products/new",children:t.jsx(_.Button,{children:"New Product"})})]})]}),t.jsx(q.ProductsBulkTable,{products:x,languageLabels:k,defaultCurrencyCode:S,deleteProductAction:o.deleteProductAction,bulkDeleteProductsAction:o.bulkDeleteProductsAction,bulkDraftProductsAction:o.bulkDraftProductsAction})]})}exports.ProductsPage=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),S=require("../../components/ProductForm.cjs.js"),a=require("../../actions.cjs.js"),E=require("../../components/FreemiusPricingDashboard.cjs.js"),T=require("../../components/DeleteProductButton.cjs.js"),M=require("next/navigation"),_=require("lucide-react"),m=require("next/link"),g=require("@nextblock-cms/ui"),O=require("../../../../../variation-utils.cjs.js"),x=require("../../server-actions.cjs.js"),b=require("../../../payments/queries.cjs.js"),U=require("@nextblock-cms/db/server"),o=require("@nextblock-cms/utils"),C=require("../../../../../currency.cjs.js");async function I({params:f,mediaPickerNode:h,availableLanguagesProp:u,languageSwitcherNode:j,copyContentNode:P,translationCtaNode:v}){const{id:y}=await f,e=await a.getProduct(y);e||M.notFound();const c=e.product_type==="digital"||e.payment_provider==="freemius",[q,w,d,A,N]=await Promise.all([b.getEnabledPaymentProviders(),b.getStoreConfigStatus(),c&&e.freemius_product_id?a.getFreemiusPricingByProductId(e.id):Promise.resolve(null),a.getGlobalProductAttributes(),U.getServiceRoleSupabaseClient().from("currencies").select("code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount").eq("is_active",!0).order("code",{ascending:!0}).then(t=>t.data||[])]),D=(N||[]).map(t=>C.normalizeCurrencyRecord(t)),k=u.find(t=>t.id===e.language_id)?.code,{attributes:R,variants:B}=O.mapRawVariantRelations(e.product_variants||[],k),F=(A||[]).map(t=>({id:t.id,name:t.name,name_translations:t.name_translations||{},slug:t.slug,terms:(t.product_attribute_terms||[]).map(r=>({...r,value_translations:r.value_translations||{}}))})),l=T.DeleteProductButton,p=E.FreemiusPricingDashboard;return i.jsxs("div",{className:"space-y-8 w-full max-w-[1400px] mx-auto px-6 py-8",children:[i.jsxs("div",{className:"flex justify-between items-center flex-wrap gap-4 w-full",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx(g.Button,{variant:"outline",size:"icon","aria-label":"Back to products",asChild:!0,children:i.jsx(m,{href:"/cms/products",children:i.jsx(_.ArrowLeft,{className:"h-4 w-4"})})}),i.jsxs("div",{children:[i.jsx("h1",{className:"text-2xl font-bold",children:"Edit Product"}),i.jsx("p",{className:"text-sm text-muted-foreground truncate max-w-md",title:e.title,children:e.title})]})]}),i.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[j,P,v,l?i.jsx(l,{productName:e.title,redirectTo:"/cms/products",className:"border-red-200 hover:bg-red-50 hover:text-red-700",deleteAction:x.deleteProductAction.bind(null,e.id)}):null,e.slug&&e.status==="active"&&i.jsx(g.Button,{variant:"outline",asChild:!0,children:i.jsxs(m,{href:`/product/${e.slug}`,target:"_blank",children:[i.jsx(_.ExternalLink,{className:"w-4 h-4 mr-2"}),"View"]})})]})]}),i.jsx(S.ProductForm,{initialData:{id:e.id,title:e.title,slug:e.slug,sku:e.sku,upc:e.upc??void 0,stock:e.stock||0,price:e.price||0,prices:Object.entries(e.prices||{}).reduce((t,[r,s])=>(t[r]=o.minorUnitAmountToMajor(s,r),t),{}),is_taxable:typeof e.is_taxable=="boolean"?e.is_taxable:!0,product_type:e.product_type,payment_provider:e.payment_provider,status:e.status,short_description:e.short_description??void 0,description_json:e.description_json,sale_price:typeof e.sale_price=="number"?e.sale_price:void 0,sale_prices:Object.entries(e.sale_prices||{}).reduce((t,[r,s])=>(t[r]=typeof s=="number"?o.minorUnitAmountToMajor(s,r):null,t),{}),freemius_plan_id:e.freemius_plan_id??void 0,freemius_product_id:e.freemius_product_id??void 0,trial_period_days:e.trial_period_days??0,trial_requires_payment_method:e.trial_requires_payment_method??!1,language_id:e.language_id,translation_group_id:e.translation_group_id,product_media:e.product_media,variation_attributes:R.map(t=>({attribute_id:t.id,term_ids:t.terms.map(r=>r.id)})),variants:B.map(t=>({...t,upc:t.upc??null,price:t.price/100,prices:Object.entries(t.prices||{}).reduce((r,[s,n])=>(r[s]=o.minorUnitAmountToMajor(n,s),r),{}),sale_price:typeof t.sale_price=="number"?t.sale_price/100:null,sale_prices:Object.entries(t.sale_prices||{}).reduce((r,[s,n])=>(r[s]=typeof n=="number"?o.minorUnitAmountToMajor(n,s):null,r),{}),main_media_id:t.main_media_id??null,main_image_url:t.image_url??null}))},isEdit:!0,mediaPickerNode:h,availableLanguagesProp:u,globalAttributesProp:F,currenciesProp:D,enabledProviders:q,configStatus:w,updateAction:x.updateProductAction.bind(null,e.id),freemiusDashboardNode:c&&e.freemius_product_id&&d&&p?i.jsx(p,{productId:e.id,freemiusProductId:e.freemius_product_id,plans:d}):void 0})]})}exports.EditProductPage=I;
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { jsxs as s, jsx as o } from "react/jsx-runtime";
|
|
2
|
-
import { ProductForm as B } from "../../components/ProductForm.es.js";
|
|
3
|
-
import { getProduct as E, getFreemiusPricingByProductId as F, getGlobalProductAttributes as S } from "../../actions.es.js";
|
|
4
|
-
import { FreemiusPricingDashboard as C } from "../../components/FreemiusPricingDashboard.es.js";
|
|
5
|
-
import { DeleteProductButton as O } from "../../components/DeleteProductButton.es.js";
|
|
6
|
-
import { notFound as q } from "next/navigation";
|
|
7
|
-
import { ArrowLeft as I, ExternalLink as L } from "lucide-react";
|
|
8
|
-
import m from "next/link";
|
|
9
|
-
import { Button as _ } from "@nextblock-cms/ui";
|
|
10
|
-
import { mapRawVariantRelations as z } from "../../../../../variation-utils.es.js";
|
|
11
|
-
import { deleteProductAction as T, updateProductAction as V } from "../../server-actions.es.js";
|
|
12
|
-
import { getEnabledPaymentProviders as G, getStoreConfigStatus as M } from "../../../payments/queries.es.js";
|
|
13
|
-
import { getServiceRoleSupabaseClient as U } from "@nextblock-cms/db/server";
|
|
14
|
-
import { minorUnitAmountToMajor as d } from "@nextblock-cms/utils";
|
|
15
|
-
import { normalizeCurrencyRecord as $ } from "../../../../../currency.es.js";
|
|
16
|
-
async function de({
|
|
17
|
-
params: f,
|
|
18
|
-
mediaPickerNode: g,
|
|
19
|
-
availableLanguagesProp: n,
|
|
20
|
-
languageSwitcherNode: b,
|
|
21
|
-
copyContentNode: h,
|
|
22
|
-
translationCtaNode: x
|
|
23
|
-
}) {
|
|
24
|
-
const { id: P } = await f, e = await E(P);
|
|
25
|
-
e || q();
|
|
26
|
-
const c = e.product_type === "digital" || e.payment_provider === "freemius", [v, y, l, w, A] = await Promise.all([
|
|
27
|
-
G(),
|
|
28
|
-
M(),
|
|
29
|
-
c && e.freemius_product_id ? F(e.id) : Promise.resolve(null),
|
|
30
|
-
S(),
|
|
31
|
-
U().from("currencies").select(
|
|
32
|
-
"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"
|
|
33
|
-
).eq("is_active", !0).order("code", { ascending: !0 }).then((t) => t.data || [])
|
|
34
|
-
]), N = (A || []).map(
|
|
35
|
-
(t) => $(t)
|
|
36
|
-
), j = n.find((t) => t.id === e.language_id)?.code, { attributes: k, variants: D } = z(
|
|
37
|
-
e.product_variants || [],
|
|
38
|
-
j
|
|
39
|
-
), R = (w || []).map((t) => ({
|
|
40
|
-
id: t.id,
|
|
41
|
-
name: t.name,
|
|
42
|
-
name_translations: t.name_translations || {},
|
|
43
|
-
slug: t.slug,
|
|
44
|
-
terms: (t.product_attribute_terms || []).map((r) => ({
|
|
45
|
-
...r,
|
|
46
|
-
value_translations: r.value_translations || {}
|
|
47
|
-
}))
|
|
48
|
-
})), u = O, p = C;
|
|
49
|
-
return /* @__PURE__ */ s("div", { className: "space-y-8 w-full max-w-[1400px] mx-auto px-6 py-8", children: [
|
|
50
|
-
/* @__PURE__ */ s("div", { className: "flex justify-between items-center flex-wrap gap-4 w-full", children: [
|
|
51
|
-
/* @__PURE__ */ s("div", { className: "flex items-center gap-3", children: [
|
|
52
|
-
/* @__PURE__ */ o(
|
|
53
|
-
_,
|
|
54
|
-
{
|
|
55
|
-
variant: "outline",
|
|
56
|
-
size: "icon",
|
|
57
|
-
"aria-label": "Back to products",
|
|
58
|
-
asChild: !0,
|
|
59
|
-
children: /* @__PURE__ */ o(m, { href: "/cms/products", children: /* @__PURE__ */ o(I, { className: "h-4 w-4" }) })
|
|
60
|
-
}
|
|
61
|
-
),
|
|
62
|
-
/* @__PURE__ */ s("div", { children: [
|
|
63
|
-
/* @__PURE__ */ o("h1", { className: "text-2xl font-bold", children: "Edit Product" }),
|
|
64
|
-
/* @__PURE__ */ o("p", { className: "text-sm text-muted-foreground truncate max-w-md", title: e.title, children: e.title })
|
|
65
|
-
] })
|
|
66
|
-
] }),
|
|
67
|
-
/* @__PURE__ */ s("div", { className: "flex items-center gap-3 flex-wrap", children: [
|
|
68
|
-
b,
|
|
69
|
-
h,
|
|
70
|
-
x,
|
|
71
|
-
u ? /* @__PURE__ */ o(
|
|
72
|
-
u,
|
|
73
|
-
{
|
|
74
|
-
productName: e.title,
|
|
75
|
-
redirectTo: "/cms/products",
|
|
76
|
-
className: "border-red-200 hover:bg-red-50 hover:text-red-700",
|
|
77
|
-
deleteAction: T.bind(null, e.id)
|
|
78
|
-
}
|
|
79
|
-
) : null,
|
|
80
|
-
e.slug && e.status === "active" && /* @__PURE__ */ o(_, { variant: "outline", asChild: !0, children: /* @__PURE__ */ s(m, { href: `/product/${e.slug}`, target: "_blank", children: [
|
|
81
|
-
/* @__PURE__ */ o(L, { className: "w-4 h-4 mr-2" }),
|
|
82
|
-
"View"
|
|
83
|
-
] }) })
|
|
84
|
-
] })
|
|
85
|
-
] }),
|
|
86
|
-
/* @__PURE__ */ o(
|
|
87
|
-
B,
|
|
88
|
-
{
|
|
89
|
-
initialData: {
|
|
90
|
-
id: e.id,
|
|
91
|
-
title: e.title,
|
|
92
|
-
slug: e.slug,
|
|
93
|
-
sku: e.sku,
|
|
94
|
-
upc: e.upc ?? void 0,
|
|
95
|
-
stock: e.stock || 0,
|
|
96
|
-
price: e.price || 0,
|
|
97
|
-
prices: Object.entries(e.prices || {}).reduce(
|
|
98
|
-
(t, [r, i]) => (t[r] = d(i, r), t),
|
|
99
|
-
{}
|
|
100
|
-
),
|
|
101
|
-
is_taxable: typeof e.is_taxable == "boolean" ? e.is_taxable : !0,
|
|
102
|
-
product_type: e.product_type,
|
|
103
|
-
payment_provider: e.payment_provider,
|
|
104
|
-
status: e.status,
|
|
105
|
-
short_description: e.short_description ?? void 0,
|
|
106
|
-
description_json: e.description_json,
|
|
107
|
-
sale_price: typeof e.sale_price == "number" ? e.sale_price : void 0,
|
|
108
|
-
sale_prices: Object.entries(e.sale_prices || {}).reduce((t, [r, i]) => (t[r] = typeof i == "number" ? d(i, r) : null, t), {}),
|
|
109
|
-
freemius_plan_id: e.freemius_plan_id ?? void 0,
|
|
110
|
-
freemius_product_id: e.freemius_product_id ?? void 0,
|
|
111
|
-
trial_period_days: e.trial_period_days ?? 0,
|
|
112
|
-
trial_requires_payment_method: e.trial_requires_payment_method ?? !1,
|
|
113
|
-
language_id: e.language_id,
|
|
114
|
-
translation_group_id: e.translation_group_id,
|
|
115
|
-
product_media: e.product_media,
|
|
116
|
-
variation_attributes: k.map((t) => ({
|
|
117
|
-
attribute_id: t.id,
|
|
118
|
-
term_ids: t.terms.map((r) => r.id)
|
|
119
|
-
})),
|
|
120
|
-
variants: D.map((t) => ({
|
|
121
|
-
...t,
|
|
122
|
-
upc: t.upc ?? null,
|
|
123
|
-
price: t.price / 100,
|
|
124
|
-
prices: Object.entries(t.prices || {}).reduce(
|
|
125
|
-
(r, [i, a]) => (r[i] = d(a, i), r),
|
|
126
|
-
{}
|
|
127
|
-
),
|
|
128
|
-
sale_price: typeof t.sale_price == "number" ? t.sale_price / 100 : null,
|
|
129
|
-
sale_prices: Object.entries(t.sale_prices || {}).reduce((r, [i, a]) => (r[i] = typeof a == "number" ? d(a, i) : null, r), {}),
|
|
130
|
-
main_media_id: t.main_media_id ?? null,
|
|
131
|
-
main_image_url: t.image_url ?? null
|
|
132
|
-
}))
|
|
133
|
-
},
|
|
134
|
-
isEdit: !0,
|
|
135
|
-
mediaPickerNode: g,
|
|
136
|
-
availableLanguagesProp: n,
|
|
137
|
-
globalAttributesProp: R,
|
|
138
|
-
currenciesProp: N,
|
|
139
|
-
enabledProviders: v,
|
|
140
|
-
configStatus: y,
|
|
141
|
-
updateAction: V.bind(null, e.id),
|
|
142
|
-
freemiusDashboardNode: c && e.freemius_product_id && l && p ? /* @__PURE__ */ o(
|
|
143
|
-
p,
|
|
144
|
-
{
|
|
145
|
-
productId: e.id,
|
|
146
|
-
freemiusProductId: e.freemius_product_id,
|
|
147
|
-
plans: l
|
|
148
|
-
}
|
|
149
|
-
) : void 0
|
|
150
|
-
}
|
|
151
|
-
)
|
|
152
|
-
] });
|
|
153
|
-
}
|
|
154
|
-
export {
|
|
155
|
-
de as EditProductPage
|
|
156
|
-
};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@nextblock-cms/db/server"),d=require("../../../product-actions.cjs.js"),l=require("../../../providers/freemius.cjs.js"),c=require("next/cache");async function _(t){const r=o.createClient(),{data:a,count:e,error:i}=await await d.getProducts(r,{...t,status:"all"});if(i)throw new Error(i.message);return{data:a,count:e}}async function m(t){const r=o.createClient(),{data:a,error:e}=await d.getProduct(r,t);if(e)throw new Error(e.message);return a}async function p(){try{const t=await l.syncFreemiusProductsToSupabase();return c.revalidatePath("/cms/products","page"),{success:!0,data:t}}catch(t){return{error:t.message||"Failed to sync with Freemius"}}}async function g(t){try{const r=await l.syncSingleFreemiusProduct(t);return c.revalidatePath("/cms/products","page"),c.revalidatePath("/cms/products/[id]/edit","page"),{success:!0,data:r}}catch(r){return{error:r.message||"Failed to sync product with Freemius"}}}async function f(t,r){try{const a=o.createClient();return await d.copyProductFromLanguage(a,t,r),c.revalidatePath("/cms/products"),c.revalidatePath(`/cms/products/${t}/edit`),{success:!0}}catch(a){return{success:!1,error:a.message||"Failed to copy product content"}}}async function y(t){const r=o.createClient(),{data:a,error:e}=await r.from("products").select("id, title, language_id, slug").eq("translation_group_id",t);if(e)throw new Error(e.message);return a}async function w(){const t=o.getServiceRoleSupabaseClient(),{data:r,error:a}=await t.from("product_attributes").select(`
|
|
2
|
-
id,
|
|
3
|
-
name,
|
|
4
|
-
name_translations,
|
|
5
|
-
slug,
|
|
6
|
-
product_attribute_terms (
|
|
7
|
-
id,
|
|
8
|
-
attribute_id,
|
|
9
|
-
value,
|
|
10
|
-
slug,
|
|
11
|
-
sort_order,
|
|
12
|
-
value_translations
|
|
13
|
-
)
|
|
14
|
-
`);if(a)throw new Error(a.message);return(r||[]).map(e=>({...e,product_attribute_terms:(e.product_attribute_terms||[]).sort((i,u)=>(i.sort_order??Number.MAX_SAFE_INTEGER)-(u.sort_order??Number.MAX_SAFE_INTEGER)||i.value.localeCompare(u.value))})).sort((e,i)=>e.name.localeCompare(i.name))}async function P(t){const r=o.createClient(),{data:a,error:e}=await r.from("freemius_plans").select(`
|
|
15
|
-
id,
|
|
16
|
-
name,
|
|
17
|
-
title,
|
|
18
|
-
freemius_pricing (
|
|
19
|
-
id,
|
|
20
|
-
license_quota,
|
|
21
|
-
api_monthly_price,
|
|
22
|
-
api_annual_price,
|
|
23
|
-
api_lifetime_price,
|
|
24
|
-
override_monthly_price,
|
|
25
|
-
override_annual_price,
|
|
26
|
-
override_lifetime_price,
|
|
27
|
-
is_active
|
|
28
|
-
)
|
|
29
|
-
`).eq("product_id",t);if(e)throw new Error(e.message);return a}async function h(t,r){const a=o.createClient(),{error:e}=await a.from("freemius_pricing").update({...r,updated_at:new Date().toISOString()}).eq("id",t);return e?{success:!1,error:e.message}:(c.revalidatePath("/cms/products"),{success:!0})}async function v(t){const r=o.createClient(),{data:a}=await r.from("products").select("translation_group_id").eq("id",t).maybeSingle();let e=[t];if(a?.translation_group_id){const{data:n}=await r.from("products").select("id").eq("translation_group_id",a.translation_group_id);n&&n.length>0&&(e=n.map(s=>s.id))}const{data:i,error:u}=await r.from("freemius_plans").select(`
|
|
30
|
-
id,
|
|
31
|
-
name,
|
|
32
|
-
title,
|
|
33
|
-
freemius_pricing (
|
|
34
|
-
id,
|
|
35
|
-
license_quota,
|
|
36
|
-
api_monthly_price,
|
|
37
|
-
api_annual_price,
|
|
38
|
-
api_lifetime_price,
|
|
39
|
-
override_monthly_price,
|
|
40
|
-
override_annual_price,
|
|
41
|
-
override_lifetime_price,
|
|
42
|
-
is_active
|
|
43
|
-
)
|
|
44
|
-
`).in("product_id",e);if(u)throw new Error(u.message);return(i||[]).map(n=>({id:n.id,name:n.name,title:n.title,pricing:(n.freemius_pricing||[]).filter(s=>s.is_active!==!1).map(s=>({id:s.id,license_quota:s.license_quota,monthly_price:s.override_monthly_price??s.api_monthly_price,annual_price:s.override_annual_price??s.api_annual_price,lifetime_price:s.override_lifetime_price??s.api_lifetime_price,is_active:s.is_active}))}))}async function b(){const t=o.createClient(),{data:r,error:a}=await t.from("categories").select("id, name, slug, description, created_at, name_translations, description_translations, product_categories(count)").order("name",{ascending:!0});if(a)throw new Error(a.message);return(r||[]).map(e=>{const i=e.product_categories?.[0]?.count??e.product_categories?.count??0;return{id:e.id,name:e.name,slug:e.slug,description:e.description??"",created_at:e.created_at,productCount:Number(i),name_translations:e.name_translations||{},description_translations:e.description_translations||{}}})}async function C(t){const r=o.createClient(),{data:a,error:e}=await r.from("categories").select("id, name, slug, description, created_at").eq("slug",t).maybeSingle();if(e)throw new Error(e.message);return a}async function F(t){const r=o.createClient(),{data:a,error:e}=await r.from("product_categories").select("category:categories(id, name, slug, description, name_translations, description_translations, created_at)").eq("product_id",t);if(e)throw new Error(e.message);return(a||[]).map(i=>i.category).filter(Boolean)}exports.copyProductFromLanguageAction=f;exports.getCategoriesWithCount=b;exports.getCategoryBySlug=C;exports.getFreemiusPricingByProductId=P;exports.getGlobalProductAttributes=w;exports.getProduct=m;exports.getProductCategories=F;exports.getProductTranslations=y;exports.getProducts=_;exports.getPublicFreemiusPricing=v;exports.triggerFreemiusSync=p;exports.triggerSingleProductSync=g;exports.updateFreemiusOverride=h;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("next/link"),o=require("lucide-react"),u=require("@nextblock-cms/ui"),l=require("@nextblock-cms/db/server"),d=require("../actions.cjs.js"),t=require("../server-actions.cjs.js"),m=require("./components/AttributeManager.cjs.js");async function A(){const[a,i]=await Promise.all([d.getGlobalProductAttributes(),l.getActiveLanguagesServerSide()]),n=(a||[]).map(r=>({id:r.id,name:r.name,name_translations:r.name_translations||{},slug:r.slug,terms:(r.product_attribute_terms||[]).map(s=>({...s,value_translations:s.value_translations||{}}))}));return e.jsxs("div",{className:"space-y-8 w-full max-w-[1200px] mx-auto px-6 py-8",children:[e.jsx("div",{className:"flex flex-wrap items-center justify-between gap-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(u.Button,{variant:"outline",size:"icon",asChild:!0,children:e.jsx(c,{href:"/cms/products",children:e.jsx(o.ArrowLeft,{className:"h-4 w-4"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Global Attribute Management"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Define reusable attributes and terms for variation-based physical products."})]})]})}),e.jsx(m.AttributeManager,{attributes:n,createAttributeAction:t.createProductAttributeAction,deleteAttributeAction:t.deleteProductAttributeAction,createTermAction:t.createProductAttributeTermAction,deleteTermAction:t.deleteProductAttributeTermAction,reorderTermsAction:t.reorderProductAttributeTermsAction,updateTranslationsAction:t.updateProductAttributeTranslationsAction,languages:i})]})}exports.AttributeManagementPage=A;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),d=require("react"),H=require("next/navigation"),t=require("@nextblock-cms/ui"),c=require("lucide-react");function J({attributes:o,languages:C,createAttributeAction:F,deleteAttributeAction:B,createTermAction:D,deleteTermAction:P,reorderTermsAction:k,updateTranslationsAction:q}){const i=H.useRouter(),[m,v]=d.useState(""),[f,j]=d.useState(null),[z,g]=d.useState(null),[N,y]=d.useState(null),[w,T]=d.useState(null),[h,b]=d.useState({}),[A,L]=d.useState(()=>o.reduce((e,n)=>(e[n.id]=n.name_translations||{},e),{})),[S,M]=d.useState(()=>o.reduce((e,n)=>{for(const r of n.terms)e[r.id]=r.value_translations||{};return e},{})),u=C.filter(e=>!e.is_default),R=async e=>{e.preventDefault();const n=await F({name:m});if(!n.success){alert(n.error||"Failed to create attribute.");return}v(""),i.refresh()},_=async(e,n)=>{e.preventDefault(),j(n);const r=await D({attributeId:n,value:h[n]||""});if(j(null),!r.success){alert(r.error||"Failed to create term.");return}b(a=>({...a,[n]:""})),i.refresh()},O=async e=>{if(!window.confirm("Delete this attribute and all of its terms?"))return;const r=await B(e);if(!r.success){alert(r.error||"Failed to delete attribute.");return}i.refresh()},U=async e=>{g(e);const n=await P(e);if(g(null),!n.success){alert(n.error||"Failed to delete term.");return}i.refresh()},I=async(e,n,r)=>{const a=e.terms.findIndex(p=>p.id===n),l=a+r;if(a===-1||l<0||l>=e.terms.length)return;const x=[...e.terms],[G]=x.splice(a,1);x.splice(l,0,G),y(e.id);const $=await k({attributeId:e.id,orderedTermIds:x.map(p=>p.id)});if(y(null),!$.success){alert($.error||"Failed to reorder terms.");return}i.refresh()},E=async e=>{T(e.id);const n=await q({attributeId:e.id,nameTranslations:A[e.id]||{},termTranslations:e.terms.map(r=>({termId:r.id,valueTranslations:S[r.id]||{}}))});if(T(null),!n.success){alert(n.error||"Failed to save translations.");return}i.refresh()};return s.jsxs("div",{className:"space-y-6",children:[s.jsx("form",{onSubmit:R,className:"rounded-lg border bg-card p-6 shadow-sm",children:s.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[s.jsxs("div",{className:"flex-1 min-w-[220px] space-y-2",children:[s.jsx(t.Label,{htmlFor:"attribute-name",children:"New Attribute"}),s.jsx(t.Input,{id:"attribute-name",value:m,onChange:e=>v(e.target.value),placeholder:"Material, Size, Color..."})]}),s.jsxs(t.Button,{type:"submit",disabled:!m.trim(),children:[s.jsx(c.Plus,{className:"mr-2 h-4 w-4"}),"Create Attribute"]})]})}),o.length===0?s.jsx("div",{className:"rounded-lg border border-dashed p-6 text-sm text-muted-foreground",children:"No global attributes have been created yet."}):s.jsx("div",{className:"grid gap-6",children:o.map(e=>s.jsxs("div",{className:"rounded-lg border bg-card p-6 shadow-sm",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-lg font-semibold",children:e.name}),s.jsx("p",{className:"text-sm text-muted-foreground",children:e.slug})]}),s.jsx(t.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>O(e.id),className:"text-muted-foreground hover:text-destructive",children:s.jsx(c.Trash2,{className:"h-4 w-4"})})]}),s.jsx("div",{className:"mt-4 space-y-2",children:e.terms.map((n,r)=>s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border bg-muted/20 px-3 py-2",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(t.Badge,{variant:"secondary",className:"py-1.5",children:n.value}),s.jsxs("span",{className:"text-xs text-muted-foreground",children:["Position ",r+1]})]}),s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx(t.Button,{type:"button",variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>I(e,n.id,-1),disabled:r===0||N===e.id,children:s.jsx(c.ChevronUp,{className:"h-4 w-4"})}),s.jsx(t.Button,{type:"button",variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>I(e,n.id,1),disabled:r===e.terms.length-1||N===e.id,children:s.jsx(c.ChevronDown,{className:"h-4 w-4"})}),s.jsx(t.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>U(n.id),className:"h-8 w-8 text-muted-foreground hover:text-destructive",disabled:z===n.id,children:s.jsx(c.Trash2,{className:"h-4 w-4"})})]})]},n.id))}),s.jsxs("form",{onSubmit:n=>_(n,e.id),className:"mt-6 flex flex-wrap items-end gap-3",children:[s.jsxs("div",{className:"flex-1 min-w-[220px] space-y-2",children:[s.jsx(t.Label,{htmlFor:`term-input-${e.id}`,children:"Add Term"}),s.jsx(t.Input,{id:`term-input-${e.id}`,value:h[e.id]||"",onChange:n=>b(r=>({...r,[e.id]:n.target.value})),placeholder:`Add a term for ${e.name}`})]}),s.jsxs(t.Button,{type:"submit",variant:"outline",disabled:!h[e.id]?.trim()||f===e.id,children:[s.jsx(c.Plus,{className:"mr-2 h-4 w-4"}),f===e.id?"Saving...":"Add Term"]})]}),u.length>0&&s.jsxs("div",{className:"mt-6 border-t pt-6 space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"font-medium",children:"Translations"}),s.jsx("p",{className:"text-sm text-muted-foreground",children:"Translate the attribute label and each term for every active site language."})]}),s.jsx(t.Button,{type:"button",variant:"outline",onClick:()=>E(e),disabled:w===e.id,children:w===e.id?"Saving...":"Save Translations"})]}),s.jsx("div",{className:"grid gap-4 md:grid-cols-2",children:u.map(n=>s.jsxs("div",{className:"space-y-2",children:[s.jsxs(t.Label,{htmlFor:`attribute-translation-${e.id}-${n.code}`,children:["Attribute Name (",n.name,")"]}),s.jsx(t.Input,{id:`attribute-translation-${e.id}-${n.code}`,value:A[e.id]?.[n.code]||"",onChange:r=>L(a=>({...a,[e.id]:{...a[e.id]||{},[n.code]:r.target.value}})),placeholder:e.name})]},`${e.id}-${n.code}`))}),s.jsx("div",{className:"space-y-3",children:e.terms.map(n=>s.jsxs("div",{className:"rounded-lg border p-4 space-y-3",children:[s.jsxs("div",{children:[s.jsx("p",{className:"font-medium",children:n.value}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Translate this term for each language."})]}),s.jsx("div",{className:"grid gap-4 md:grid-cols-2",children:u.map(r=>s.jsxs("div",{className:"space-y-2",children:[s.jsx(t.Label,{htmlFor:`term-translation-${n.id}-${r.code}`,children:r.name}),s.jsx(t.Input,{id:`term-translation-${n.id}-${r.code}`,value:S[n.id]?.[r.code]||"",onChange:a=>M(l=>({...l,[n.id]:{...l[n.id]||{},[r.code]:a.target.value}})),placeholder:n.value})]},`${n.id}-${r.code}`))})]},`translations-${n.id}`))})]})]},e.id))})]})}exports.AttributeManager=J;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("next/link"),i=require("lucide-react"),n=require("@nextblock-cms/ui"),o=require("@nextblock-cms/db/server"),c=require("../actions.cjs.js"),t=require("../server-actions.cjs.js"),g=require("./components/CategoryManager.cjs.js");async function l(){const[r,a]=await Promise.all([c.getCategoriesWithCount(),o.getActiveLanguagesServerSide()]);return e.jsxs("div",{className:"space-y-8 w-full max-w-[1200px] mx-auto px-6 py-8",children:[e.jsx("div",{className:"flex flex-wrap items-center justify-between gap-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(n.Button,{variant:"outline",size:"icon",asChild:!0,children:e.jsx(s,{href:"/cms/products",children:e.jsx(i.ArrowLeft,{className:"h-4 w-4"})})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Category Management"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Create and manage product categories for organizing your e-commerce catalog."})]})]})}),e.jsx(g.CategoryManager,{initialCategories:r,createCategory:t.createCategoryAction,updateCategory:t.updateCategoryAction,deleteCategory:t.deleteCategoryAction,languages:a})]})}exports.CategoryManagementPage=l;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),c=require("lucide-react"),l=require("sonner"),_=require("next/navigation"),s=require("@nextblock-cms/ui");function O({initialCategories:g=[],languages:q=[],createCategory:A,updateCategory:L,deleteCategory:E}){const y=_.useRouter(),[v,I]=n.useState(g),[o,m]=n.useState(!1),[d,w]=n.useState(null),[u,h]=n.useState(""),[C,x]=n.useState(""),[k,p]=n.useState(""),[S,b]=n.useState({}),[T,f]=n.useState({}),[F,j]=n.useState(!1),z=(q||[]).filter(t=>!t.is_default);n.useEffect(()=>{I(g)},[g]);const D=t=>t.toLowerCase().trim().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,""),$=t=>{const r=t.target.value;h(r),!F&&!d&&x(D(r))},M=t=>{x(D(t.target.value)),j(!0)},P=t=>{w(t),h(t.name),x(t.slug),p(t.description||""),b(t.name_translations||{}),f(t.description_translations||{}),j(!0)},N=()=>{w(null),h(""),x(""),p(""),b({}),f({}),j(!1)},B=async t=>{if(t.preventDefault(),!u.trim()){l.toast.error("Category name is required.");return}m(!0);const r=l.toast.loading(d?"Updating category...":"Creating category...");try{const a={name:u.trim(),slug:C.trim()||void 0,description:k.trim()||void 0,nameTranslations:S,descriptionTranslations:T};let i;d?i=await L(d.id,a):i=await A(a),i.success?(l.toast.success(d?"Category updated successfully!":"Category created successfully!",{id:r}),N(),y.refresh()):l.toast.error(i.error||"Failed to save category.",{id:r})}catch(a){l.toast.error(a.message||"An unexpected error occurred.",{id:r})}finally{m(!1)}},R=async t=>{const r=`Are you sure you want to delete the category "${t.name}"? This will detach it from any assigned products.`;if(!window.confirm(r))return;m(!0);const a=l.toast.loading("Deleting category...");try{const i=await E(t.id);i.success?(l.toast.success("Category deleted successfully!",{id:a}),d?.id===t.id&&N(),y.refresh()):l.toast.error(i.error||"Failed to delete category.",{id:a})}catch(i){l.toast.error(i.message||"An unexpected error occurred.",{id:a})}finally{m(!1)}};return e.jsxs("div",{className:"grid gap-6 md:grid-cols-12 items-start",children:[e.jsx("div",{className:"md:col-span-4 space-y-4",children:e.jsxs(s.Card,{className:"p-5 shadow-lg border-t-4 border-t-amber-500 bg-card/65 backdrop-blur-md transition-all duration-300",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx(c.FolderPlus,{className:"h-5 w-5 text-amber-500"}),e.jsx("h2",{className:"text-base font-bold tracking-tight",children:d?"Edit Category":"Add New Category"})]}),e.jsxs("form",{onSubmit:B,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(s.Label,{htmlFor:"name",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Name"}),e.jsx(s.Input,{id:"name",placeholder:"e.g. T-Shirts",value:u,onChange:$,disabled:o,className:"h-8 text-sm",required:!0})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs(s.Label,{htmlFor:"slug",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none flex items-center justify-between w-full",children:[e.jsx("span",{children:"Slug"}),!F&&!d&&e.jsx("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 capitalize",children:"Auto-generating"})]}),e.jsx(s.Input,{id:"slug",placeholder:"e.g. t-shirts",value:C,onChange:M,disabled:o,className:"h-8 text-sm font-mono"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(s.Label,{htmlFor:"description",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Description"}),e.jsx(s.Textarea,{id:"description",placeholder:"Optional description of the category...",value:k,onChange:t=>p(t.target.value),disabled:o,className:"text-sm min-h-[90px] resize-none"})]}),z.length>0&&e.jsxs("div",{className:"border-t border-border/50 pt-4 mt-4 space-y-4",children:[e.jsx("h3",{className:"text-xs uppercase font-bold text-muted-foreground tracking-wider",children:"Translations"}),z.map(t=>e.jsxs("div",{className:"space-y-3 p-3 rounded-md bg-muted/30 border border-border/30",children:[e.jsx("span",{className:"text-[11px] font-bold text-amber-600 dark:text-amber-400 uppercase tracking-wider",children:t.name}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs(s.Label,{htmlFor:`name-${t.code}`,className:"text-[10px] uppercase font-bold text-muted-foreground tracking-wider leading-none",children:["Name (",t.code,")"]}),e.jsx(s.Input,{id:`name-${t.code}`,placeholder:`Translation for ${u||"Name"}`,value:S[t.code]||"",onChange:r=>b(a=>({...a,[t.code]:r.target.value})),disabled:o,className:"h-8 text-sm"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs(s.Label,{htmlFor:`desc-${t.code}`,className:"text-[10px] uppercase font-bold text-muted-foreground tracking-wider leading-none",children:["Description (",t.code,")"]}),e.jsx(s.Textarea,{id:`desc-${t.code}`,placeholder:"Translation for Description",value:T[t.code]||"",onChange:r=>f(a=>({...a,[t.code]:r.target.value})),disabled:o,className:"text-sm min-h-[60px] resize-none"})]})]},t.code))]}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsx(s.Button,{type:"submit",disabled:o,size:"sm",className:"flex-1 bg-amber-600 hover:bg-amber-500 text-white font-medium shadow-md shadow-amber-600/10 h-8 text-xs cursor-pointer",children:o?e.jsxs(e.Fragment,{children:[e.jsx(c.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}),"Saving..."]}):d?"Update Category":"Create Category"}),d&&e.jsx(s.Button,{type:"button",onClick:N,disabled:o,variant:"outline",size:"sm",className:"h-8 text-xs border-dashed cursor-pointer",children:"Cancel"})]})]})]})}),e.jsx("div",{className:"md:col-span-8",children:e.jsxs(s.Card,{className:"p-4 shadow-lg bg-card/65 backdrop-blur-md border border-border/40",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4 pb-2 border-b border-border/50",children:[e.jsx(c.FolderKanban,{className:"h-5 w-5 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-bold tracking-tight",children:"Active Categories"}),e.jsx("p",{className:"text-[11px] text-muted-foreground leading-none mt-0.5",children:"Categories are shared globally across languages."})]})]}),v.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 px-4 text-center border-2 border-dashed border-border/60 rounded-lg bg-muted/20 animate-in fade-in duration-300",children:[e.jsx(c.HelpCircle,{className:"h-10 w-10 text-muted-foreground/50 mb-3"}),e.jsx("h3",{className:"text-sm font-bold text-muted-foreground",children:"No Categories Found"}),e.jsx("p",{className:"text-xs text-muted-foreground/80 max-w-sm mt-1",children:"Add your first category using the form on the left to start organizing your catalog products."})]}):e.jsx("div",{className:"overflow-x-auto border rounded-lg bg-background/50",children:e.jsxs("table",{className:"w-full text-left border-collapse text-xs",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b bg-muted/40 font-bold uppercase tracking-wider text-muted-foreground/85 select-none",children:[e.jsx("th",{className:"p-3 pl-4",children:"Name"}),e.jsx("th",{className:"p-3",children:"Slug"}),e.jsx("th",{className:"p-3 text-center",children:"Products"}),e.jsx("th",{className:"p-3 pr-4 text-right",children:"Actions"})]})}),e.jsx("tbody",{className:"divide-y divide-border/60",children:v.map(t=>e.jsxs("tr",{className:"hover:bg-muted/10 transition-colors group",children:[e.jsxs("td",{className:"p-3 pl-4",children:[e.jsx("div",{className:"font-semibold text-slate-800 dark:text-slate-100",children:t.name}),t.description&&e.jsx("div",{className:"text-[10px] text-muted-foreground mt-0.5 max-w-xs truncate leading-normal",title:t.description,children:t.description})]}),e.jsx("td",{className:"p-3",children:e.jsxs("code",{className:"px-1.5 py-0.5 rounded bg-muted/65 font-mono text-[10px]",children:["/",t.slug]})}),e.jsx("td",{className:"p-3 text-center",children:e.jsx("span",{className:"inline-flex items-center justify-center px-2 py-0.5 rounded-full text-[10px] font-bold bg-amber-500/10 text-amber-800 dark:text-amber-300 border border-amber-500/15",children:t.productCount})}),e.jsx("td",{className:"p-3 pr-4 text-right",children:e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[e.jsx(s.Button,{variant:"outline",size:"icon",disabled:o,onClick:()=>P(t),className:"h-7 w-7 opacity-85 hover:opacity-100 group-hover:border-amber-500/30 cursor-pointer",title:"Edit Category",children:e.jsx(c.Edit2,{className:"h-3.5 w-3.5 text-muted-foreground group-hover:text-amber-600 dark:group-hover:text-amber-400"})}),e.jsx(s.Button,{variant:"outline",size:"icon",disabled:o,onClick:()=>R(t),className:"h-7 w-7 opacity-85 hover:opacity-100 group-hover:border-red-500/30 cursor-pointer",title:"Delete Category",children:e.jsx(c.Trash2,{className:"h-3.5 w-3.5 text-muted-foreground group-hover:text-red-500"})})]})})]},t.id))})]})})]})})]})}exports.CategoryManager=O;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),t=require("@nextblock-cms/ui"),j=require("../actions.cjs.js"),L=require("next/navigation"),h=require("lucide-react");function k({productId:i,currentLanguageId:C,translationGroupId:l,allSiteLanguages:x}){const[d,p]=n.useState(!1),[r,S]=n.useState(null),[y,v]=n.useState([]),[m,f]=n.useState(!1),[o,c]=n.useState(null),[u,b]=n.useTransition(),P=L.useRouter();n.useEffect(()=>{d&&l&&(async()=>{f(!0);try{const g=(await j.getProductTranslations(l)).filter(D=>D.id!==i);v(g)}catch(a){console.error("Error fetching translations:",a)}finally{f(!1)}})()},[d,l,i]);const T=async()=>{if(!r){c({type:"error",text:"Please select a source version to copy from."});return}c(null),b(async()=>{const s=await j.copyProductFromLanguageAction(i,r);s.success?(c({type:"success",text:"Content copied successfully. The page will now refresh."}),setTimeout(()=>{p(!1),P.refresh()},1500)):c({type:"error",text:s.error||"Failed to copy content."})})},w=x.find(s=>s.id===C);return e.jsxs(t.Dialog,{open:d,onOpenChange:p,children:[e.jsx(t.DialogTrigger,{asChild:!0,children:e.jsxs(t.Button,{variant:"outline",title:"Copy content from another language",children:[e.jsx(h.Copy,{className:"h-4 w-4 mr-2"}),"Copy Content..."]})}),e.jsxs(t.DialogContent,{children:[e.jsxs(t.DialogHeader,{children:[e.jsx(t.DialogTitle,{children:"Copy Content from Another Language"}),e.jsxs(t.DialogDescription,{children:["Select a source version to copy from. This will replace the title, description, and media of the current product (",w?.name,"). This action cannot be undone."]})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(t.Label,{htmlFor:"sourceProduct",children:"Select Source Version"}),e.jsxs(t.Select,{onValueChange:s=>S(s),disabled:u||m,value:r||void 0,children:[e.jsx(t.SelectTrigger,{id:"sourceProduct",children:e.jsx(t.SelectValue,{placeholder:m?"Loading versions...":"Select a version..."})}),e.jsx(t.SelectContent,{children:y.length>0?y.map(s=>{const a=x.find(g=>g.id===s.language_id);return e.jsxs(t.SelectItem,{value:s.id,children:[s.title," (",a?.name||"Unknown Language",")"]},s.id)}):e.jsx(t.SelectItem,{value:"none",disabled:!0,children:"No other versions available"})})]})]}),o&&e.jsxs("div",{className:`p-3 rounded-md text-sm flex items-center gap-2 ${o.type==="success"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"}`,children:[o.type==="success"?e.jsx(h.CheckCircle2,{className:"h-5 w-5"}):e.jsx(h.AlertCircle,{className:"h-5 w-5"}),o.text]})]}),e.jsxs(t.DialogFooter,{children:[e.jsx(t.DialogClose,{asChild:!0,children:e.jsx(t.Button,{variant:"outline",children:"Cancel"})}),e.jsx(t.Button,{onClick:T,disabled:u||!r||r==="none",children:u?"Copying...":"Copy Content & Replace"})]})]})]})}exports.CopyProductFromLanguage=k;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),N=require("react"),y=require("@nextblock-cms/ui"),w=require("@nextblock-cms/utils"),v=require("../../../../currency.cjs.js");function C(s){return w.getCurrencyMinorUnitFactor(s)===1?0:2}function h(s,d){return s==null||Number.isNaN(s)?"":s.toFixed(d)}function j({id:s,currencyCode:d,value:n,disabled:x,placeholder:p,className:f,allowEmpty:g=!1,onValueChange:i}){const c=C(d),[u,m]=N.useState(!1),[b,l]=N.useState(()=>h(n,c));return N.useEffect(()=>{u||l(h(n,c))},[n,c,u]),t.jsx(y.Input,{id:s,type:"text",inputMode:"decimal",value:b,disabled:x,placeholder:p,className:f,onFocus:()=>m(!0),onChange:e=>{let r=e.target.value.replace(/[^0-9.]/g,"");const o=r.indexOf(".");if(o!==-1&&(r=r.slice(0,o+1)+r.slice(o+1).replace(/\./g,"")),l(r),r===""||r==="."){i(g?null:0);return}const a=Number(r);Number.isNaN(a)||i(a)},onBlur:()=>{if(m(!1),n!=null&&!Number.isNaN(n)){const e=Number(n.toFixed(c));e!==n&&i(e)}}})}function k({idPrefix:s="currency",currencies:d,prices:n,salePrices:x,managedCurrencyCodes:p=[],onPriceChange:f,onSalePriceChange:g,readOnly:i=!1,helperText:c,trailing:u}){const m=d.find(l=>l.is_default)??d[0],b=new Set(p);return m?t.jsxs("div",{className:"flex flex-col gap-2",children:[c&&t.jsx("p",{className:"text-xs text-muted-foreground bg-muted/20 p-2 rounded-md border",children:c}),t.jsx("div",{className:"divide-y divide-muted/50",children:d.map(l=>{const e=v.normalizeCurrencyRecord(l),r=e.is_default!==!0&&b.has(e.code),o=i||r;return t.jsxs("div",{className:"flex flex-wrap items-stretch gap-4 py-3 first:pt-0 last:pb-0",children:[t.jsxs("div",{className:"flex items-center gap-2 w-[160px] shrink-0 self-stretch border-r border-border/50 pr-4",children:[t.jsx("span",{className:"text-sm font-black tracking-tighter text-foreground",children:e.code}),t.jsx("span",{className:"text-[11px] text-muted-foreground font-medium",children:e.symbol}),e.is_default?t.jsx("span",{className:"text-[9px] uppercase font-bold bg-primary/10 text-primary px-1.5 py-0.5 rounded tracking-widest leading-none",children:"Default"}):r?t.jsx("span",{className:"text-[9px] uppercase font-bold bg-muted text-muted-foreground px-1.5 py-0.5 rounded tracking-widest leading-none",children:"Auto"}):null,!e.is_default&&t.jsxs("span",{className:"text-[9px] text-muted-foreground/80 font-medium tracking-wide leading-none ml-auto",children:["x",e.exchange_rate]})]}),t.jsxs("div",{className:"grid flex-1 grid-cols-2 items-end gap-3 sm:grid-cols-4",children:[t.jsxs("div",{className:"min-w-0 space-y-1",children:[t.jsx(y.Label,{htmlFor:`${s}-price-${e.code}`,className:"block text-[10px] uppercase font-bold text-muted-foreground tracking-widest",children:"Price"}),t.jsxs("div",{className:"relative",children:[t.jsx("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-xs text-muted-foreground font-bold pointer-events-none",children:e.symbol}),t.jsx(j,{id:`${s}-price-${e.code}`,currencyCode:e.code,value:n[e.code],disabled:o,className:"h-8 w-full text-sm pl-6",onValueChange:a=>f(e.code,a??0)})]})]}),t.jsxs("div",{className:"min-w-0 space-y-1",children:[t.jsx(y.Label,{htmlFor:`${s}-sale-price-${e.code}`,className:"block text-[10px] uppercase font-bold text-muted-foreground tracking-widest",children:"Sale"}),t.jsxs("div",{className:"relative",children:[t.jsx("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-xs text-muted-foreground font-bold pointer-events-none",children:e.symbol}),t.jsx(j,{id:`${s}-sale-price-${e.code}`,currencyCode:e.code,value:x[e.code],disabled:o,placeholder:r?"Auto":"—",allowEmpty:!0,className:"h-8 w-full text-sm pl-6",onValueChange:a=>g(e.code,a)})]})]}),u&&e.is_default?u:null]})]},e.code)})})]}):null}exports.CurrencyPriceFields=k;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),a=require("@nextblock-cms/ui"),f=require("react"),g=require("lucide-react"),y=require("next/navigation");function p({productName:u,isIcon:c=!1,className:r,redirectTo:n,deleteAction:l}){const[e,d]=f.useTransition(),o=y.useRouter(),i=async s=>{s.preventDefault(),s.stopPropagation(),window.confirm(`Are you sure you want to delete "${u}"? This action cannot be undone.`)&&d(async()=>{try{await l(),n?o.push(n):o.refresh()}catch(h){console.error("Failed to delete product:",h),alert("Failed to delete product. Please try again.")}})};return c?t.jsx(a.Button,{variant:"ghost",size:"icon",onClick:i,disabled:e,className:`text-red-500 hover:text-red-600 hover:bg-red-50 ${r}`,title:"Delete Product",children:t.jsx(g.Trash2,{className:"h-4 w-4"})}):t.jsx(a.Button,{variant:"destructive",onClick:i,disabled:e,className:r,type:"button",children:e?"Deleting...":"Delete Product"})}exports.DeleteProductButton=p;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),h=require("react"),r=require("@nextblock-cms/ui"),o=require("sonner"),m=require("../actions.cjs.js");function b({plans:l}){return e.jsx("div",{className:"w-full",children:l&&l.length>0?e.jsx("div",{className:"space-y-8",children:l.map(a=>e.jsxs("div",{className:"w-full",children:[l.length>1&&e.jsx("h3",{className:"font-semibold text-lg text-slate-700 dark:text-slate-300 border-b pb-2 mb-4 mt-6",children:a.title||a.name}),e.jsx("div",{className:`${l.length>1?"rounded-lg border":"rounded-b-lg border-x border-b"} overflow-x-auto dark:border-slate-700 bg-card`,children:e.jsxs(r.Table,{children:[e.jsx(r.TableHeader,{children:e.jsxs(r.TableRow,{children:[e.jsx(r.TableHead,{children:"Licenses"}),e.jsx(r.TableHead,{children:"API Monthly"}),e.jsx(r.TableHead,{children:"Override Monthly"}),e.jsx(r.TableHead,{children:"API Annual"}),e.jsx(r.TableHead,{children:"Override Annual"}),e.jsx(r.TableHead,{children:"API Lifetime"}),e.jsx(r.TableHead,{children:"Override Lifetime"})]})}),e.jsx(r.TableBody,{children:a.freemius_pricing&&a.freemius_pricing.length>0?a.freemius_pricing.map(s=>e.jsx(x,{pricing:s},s.id)):e.jsx(r.TableRow,{children:e.jsx(r.TableCell,{colSpan:7,className:"text-center text-slate-500 py-4",children:"No pricing configurations found for this plan."})})})]})})]},a.id))}):e.jsxs("div",{className:"text-center py-10 bg-slate-50 dark:bg-slate-800/50 rounded border border-dashed border-slate-300 dark:border-slate-700",children:[e.jsx("p",{className:"text-slate-500",children:"No Freemius plans synchronized yet."}),e.jsx("p",{className:"text-xs mt-2 text-slate-400",children:"Click the full synchronization button to import from Freemius."})]})})}function x({pricing:l}){const[a,s]=h.useTransition(),i=(t,d)=>{const n=d===""?null:parseFloat(d);d!==""&&Number.isNaN(n)||s(async()=>{const{success:c,error:u}=await m.updateFreemiusOverride(l.id,{[t]:n});c?o.toast.success("Pricing override saved"):o.toast.error(u||"Failed to update pricing")})};return e.jsxs(r.TableRow,{children:[e.jsx(r.TableCell,{className:"font-medium",children:l.license_quota||"Unlimited"}),e.jsx(r.TableCell,{className:"text-slate-500",children:l.api_monthly_price?`$${l.api_monthly_price}`:"-"}),e.jsx(r.TableCell,{children:e.jsx(r.Input,{type:"number",step:"0.01",placeholder:"Override...",defaultValue:l.override_monthly_price||"",onBlur:t=>{t.target.value!==(l.override_monthly_price?.toString()||"")&&i("override_monthly_price",t.target.value)},className:"w-24 h-8",disabled:a})}),e.jsx(r.TableCell,{className:"text-slate-500",children:l.api_annual_price?`$${l.api_annual_price}`:"-"}),e.jsx(r.TableCell,{children:e.jsx(r.Input,{type:"number",step:"0.01",placeholder:"Override...",defaultValue:l.override_annual_price||"",onBlur:t=>{t.target.value!==(l.override_annual_price?.toString()||"")&&i("override_annual_price",t.target.value)},className:"w-24 h-8",disabled:a})}),e.jsx(r.TableCell,{className:"text-slate-500",children:l.api_lifetime_price?`$${l.api_lifetime_price}`:"-"}),e.jsx(r.TableCell,{children:e.jsx(r.Input,{type:"number",step:"0.01",placeholder:"Override...",defaultValue:l.override_lifetime_price||"",onBlur:t=>{t.target.value!==(l.override_lifetime_price?.toString()||"")&&i("override_lifetime_price",t.target.value)},className:"w-24 h-8",disabled:a})})]})}exports.FreemiusPricingDashboard=b;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),n=require("react"),u=require("lucide-react"),q=require("@nextblock-cms/utils"),a=require("@nextblock-cms/ui"),L=require("../server-actions.cjs.js"),x=require("sonner");function P({categories:d=[],selectedIds:s=[],onChange:m,placeholder:v="Select categories..."}){const[h,w]=n.useState(!1),[l,g]=n.useState(""),[o,f]=n.useState(d),[p,b]=n.useState(!1);n.useEffect(()=>{f(d)},[d]);const y=n.useMemo(()=>o.filter(e=>s.includes(e.id)),[o,s]),j=n.useMemo(()=>{if(!l)return o;const e=l.toLowerCase();return o.filter(t=>t.name.toLowerCase().includes(e)||t.slug.toLowerCase().includes(e))},[o,l]),i=l.trim(),C=n.useMemo(()=>{if(!i)return!1;const e=i.toLowerCase();return!o.some(t=>t.name.toLowerCase()===e)},[o,i]),N=async()=>{if(i){b(!0);try{const e=await L.createCategoryAction({name:i});if(e.success&&e.category){const t={id:e.category.id,name:e.category.name,slug:e.category.slug};f(c=>[...c,t]),m([...s,t.id]),g(""),x.toast.success(`Category "${t.name}" created successfully.`)}else x.toast.error(e.error||"Failed to create category.")}catch(e){x.toast.error(e.message||"An error occurred while creating category.")}finally{b(!1)}}},k=e=>{const t=s.includes(e)?s.filter(c=>c!==e):[...s,e];m(t)},S=(e,t)=>{t.stopPropagation(),m(s.filter(c=>c!==e))};return r.jsxs("div",{className:"space-y-2",children:[r.jsx("div",{className:"flex flex-wrap gap-1.5 min-h-[32px] p-1 border rounded-md bg-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2",children:y.length===0?r.jsx("span",{className:"text-xs text-muted-foreground self-center px-2 py-1 select-none",children:"No categories selected."}):y.map(e=>r.jsxs(a.Badge,{variant:"secondary",className:"pl-2 pr-1.5 py-0.5 text-xs flex items-center gap-1 bg-amber-500/10 text-amber-800 dark:text-amber-300 border border-amber-500/20 rounded-full",children:[e.name,r.jsx("button",{type:"button",onClick:t=>S(e.id,t),className:"rounded-full p-0.5 text-muted-foreground hover:bg-amber-500/20 hover:text-amber-950 dark:hover:text-amber-50 transition-colors cursor-pointer","aria-label":`Remove ${e.name}`,children:r.jsx(u.X,{className:"h-3 w-3"})})]},e.id))}),r.jsxs(a.Popover,{open:h,onOpenChange:w,children:[r.jsx(a.PopoverTrigger,{asChild:!0,children:r.jsxs(a.Button,{variant:"outline",role:"combobox","aria-expanded":h,className:"w-full justify-between h-8 text-xs font-normal",children:[r.jsx("span",{className:"truncate",children:s.length>0?`${s.length} categor${s.length===1?"y":"ies"} selected`:v}),r.jsx(u.ChevronsUpDown,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),r.jsxs(a.PopoverContent,{className:"w-(--radix-popover-trigger-width) p-0",align:"start",children:[r.jsxs("div",{className:"flex items-center border-b px-3",children:[r.jsx(u.Search,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),r.jsx(a.Input,{className:"flex h-9 w-full rounded-md bg-transparent py-2 text-xs outline-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0",placeholder:"Search categories...",value:l,onChange:e=>g(e.target.value)})]}),C&&r.jsx("div",{className:"border-b border-border/50 p-1",children:r.jsxs(a.Button,{type:"button",variant:"ghost",size:"sm",className:"w-full justify-start text-xs h-8 text-amber-600 dark:text-amber-400 hover:text-amber-700 hover:bg-amber-500/10 cursor-pointer",onClick:N,disabled:p,children:[p?r.jsx(u.Loader2,{className:"mr-2 h-3 w-3 animate-spin"}):r.jsx("span",{className:"font-bold mr-1.5",children:"+"}),'Create category "',i,'"']})}),r.jsx("div",{className:"max-h-60 overflow-y-auto p-1",children:j.length===0?r.jsx("p",{className:"py-4 text-center text-xs text-muted-foreground",children:"No categories found."}):r.jsx("div",{className:"flex flex-col gap-0.5",children:j.map(e=>{const t=s.includes(e.id);return r.jsxs("div",{onClick:()=>k(e.id),className:q.cn("relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-xs outline-none hover:bg-accent hover:text-accent-foreground text-left transition-colors",t&&"bg-accent/40 font-medium"),children:[r.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center pointer-events-none",children:r.jsx(a.Checkbox,{checked:t,tabIndex:-1,"aria-label":`Toggle ${e.name}`,className:"h-3.5 w-3.5"})}),r.jsxs("span",{className:"flex flex-col",children:[r.jsx("span",{children:e.name}),r.jsxs("span",{className:"font-mono text-[9px] text-muted-foreground leading-none",children:["/",e.slug]})]}),t&&r.jsx("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:r.jsx(u.Check,{className:"h-3.5 w-3.5 text-primary"})})]},e.id)})})})]})]})]})}exports.ProductCategorySelector=P;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),Ke=require("@hookform/resolvers/zod"),B=require("lucide-react"),a=require("@nextblock-cms/ui"),$e=require("../../../../product-schema.cjs.js"),He=require("react-hook-form"),Je=require("./ProductMediaManager.cjs.js"),Xe=require("./SyncFreemiusPricingButton.cjs.js"),Ye=require("./VariationsEditor.cjs.js"),Pe=require("./CurrencyPriceFields.cjs.js"),we=require("./SaleScheduleFields.cjs.js"),Qe=require("./ProductCategorySelector.cjs.js"),L=require("../product-price-sync.cjs.js"),We=require("../../../../types.cjs.js"),Ce=require("../../../../currency.cjs.js"),O=require("@nextblock-cms/utils");function z({title:s,description:r,action:y,children:m,hideHeader:P}){return e.jsxs("section",{className:"rounded-lg border bg-card p-3 shadow-sm space-y-3",children:[!P&&e.jsxs("div",{className:"flex items-start justify-between gap-4 flex-wrap border-b border-muted/50 pb-2 mb-1",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("h2",{className:"text-sm font-bold tracking-tight",children:s}),r?e.jsx("p",{className:"text-[11px] text-muted-foreground leading-none",children:r}):null]}),y]}),e.jsx("div",{className:P?"":"pt-1",children:m})]})}function Ze(s,r,y){const m=r?Number.parseInt(r,10):void 0;return s?.language_id||(Number.isFinite(m)?m:void 0)||y.find(P=>P.is_default)?.id||y[0]?.id||1}function ke(s,r,y,m,P){const k=(m.find(b=>b.is_default)??m[0])?.code||"USD",I=s?.prices&&Object.keys(s.prices).length>0?s.prices:{[k]:typeof s?.price=="number"?s.price/100:0},T=s?.sale_prices&&Object.keys(s.sale_prices).length>0?s.sale_prices:typeof s?.sale_price=="number"?{[k]:s.sale_price/100}:{},A=s?.product_type||"",F=s?.payment_provider||(s?.product_type?We.derivePaymentProviderFromProductType(s.product_type):"stripe");return{...L.sanitizeProductFormValuesForStoreManagedCurrencies({product_type:A||"physical",payment_provider:F,title:s?.title||"",slug:s?.slug||"",sku:s?.sku||"",upc:s?.upc||"",is_taxable:s?.is_taxable??!0,price:typeof s?.price=="number"?s.price/100:0,prices:I,sale_price:typeof s?.sale_price=="number"?s.sale_price/100:null,sale_prices:T,stock:s?.stock||0,meta_title:s?.meta_title||"",meta_description:s?.meta_description||"",custom_canonical:s?.custom_canonical||"",short_description:s?.short_description||"",description_json:s?.description_json||{type:"doc",content:[{type:"paragraph"}]},freemius_product_id:s?.freemius_product_id||"",freemius_plan_id:s?.freemius_plan_id||"",trial_period_days:s?.trial_period_days??0,trial_requires_payment_method:s?.trial_requires_payment_method??!1,status:s?.status||"draft",language_id:Ze(s,r,y),translation_group_id:s?.translation_group_id||P||void 0,product_media:s?.product_media?.map(b=>({media_id:b.media_id}))||[],category_ids:s?.category_ids||[],variation_attributes:s?.variation_attributes||[],variants:s?.variants?.map(b=>({...b,prices:b.prices||{},sale_prices:b.sale_prices||{}}))||[]},m),product_type:A,payment_provider:F}}function Fe(s){return s?s.map(r=>({id:r.id||r.media_id,media_id:r.media_id,file_path:r.media?.file_path||r.media?.object_key||"",alt:r.media?.alt_text||"",sort_order:r.sort_order??0})).sort((r,y)=>r.sort_order-y.sort_order):[]}function Ge(s){return s.map(r=>({media_id:r.media_id}))}function De(s){return s.map(r=>({media_id:r.media_id,file_path:r.file_path,alt:r.alt}))}const es=s=>s.toString().toLowerCase().trim().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"");function ss({initialData:s,isEdit:r=!1,mediaPickerNode:y,availableLanguagesProp:m,globalAttributesProp:P,currenciesProp:K,translationGroupId:k,targetLanguageId:I,freemiusDashboardNode:T,enabledProviders:A,configStatus:F,createAction:$,updateAction:b,availableCategoriesProp:Me=[],hasOpenDraft:Ve=!1,onSeoChange:te}){const[R,H]=o.useState(!1),[J,X]=o.useState(()=>!!s?.variants?.length),u=o.useMemo(()=>K.filter(t=>t.is_active!==!1).sort((t,d)=>t.is_default!==d.is_default?t.is_default?-1:1:t.code.localeCompare(d.code)),[K]),n=o.useMemo(()=>u.find(t=>t.is_default)??u[0],[u]),E=o.useMemo(()=>L.getStoreManagedPriceCurrencyCodes(u),[u]),re=He.useForm({resolver:Ke.zodResolver($e.productSchema),defaultValues:ke(s,I,m,u,k)}),{register:c,handleSubmit:Y,setValue:i,reset:ae,watch:l,setError:Q,formState:{errors:x,dirtyFields:ie}}=re,de=o.useRef(!0),W=o.useRef(null),[Ie,Z]=o.useState(!1),[oe,G]=o.useState(null),[ne,qe]=o.useState(null),M=l(),ce=re.formState.isDirty,le=M.title,ue=M.meta_title,pe=M.meta_description;o.useEffect(()=>{te?.({title:le,meta_title:ue,meta_description:pe})},[le,ue,pe,te]),o.useEffect(()=>{if(!r)return;if(de.current){de.current=!1,W.current=JSON.stringify(M);return}if(!ce)return;const t=JSON.stringify(M);if(t===W.current)return;const d=setTimeout(()=>{R||(W.current=t,Y(Se)())},400);return()=>clearTimeout(d)},[M,r,ce,R,Y]);const me=l("title"),q=l("product_type"),h=q==="digital"?"freemius":q==="physical"?"stripe":void 0,j=q==="physical",xe=q==="digital",he=h?A[h]:!1,fe=h?F[h].hasKeys:!1,Te=!!l("freemius_product_id"),ge=Number(l("trial_period_days")||0),_e=!!l("trial_requires_payment_method"),Ae=l("variants")||[],w=l("price"),V=l("sale_price"),v=l("prices")||{},C=l("sale_prices")||{},N=(Ae?.length||0)>0,Re=l("language_id"),Ee=m.find(t=>t.id===Re)?.code||m.find(t=>t.is_default)?.code||m[0]?.code,U=o.useMemo(()=>L.resolveEditorCurrencyPriceMaps({currencies:u,prices:v,salePrices:C,fallbackPrice:w,fallbackSalePrice:V}),[w,V,u,v,C]),Ue=o.useMemo(()=>s?.variants?.map(t=>({...t,prices:t.prices||{},sale_prices:t.sale_prices||{}})),[s?.variants]);o.useEffect(()=>{if(ie.title&&!r){const t=es(me);i("slug",t,{shouldValidate:!0})}},[me,ie.title,i,r]);const[D,ye]=o.useState(()=>Fe(s?.product_media)),[ee,be]=o.useState(new Set);o.useEffect(()=>{ae(ke(s,I,m,u,k)),ye(Fe(s?.product_media)),be(new Set),X(!!s?.variants?.length)},[m,u,s,ae,I,k]);const Be=t=>{const d=new Set(t.map(_=>_.id)),p=D.filter(_=>!d.has(_.id)),f=new Set(ee);p.forEach(_=>{_.media_id&&f.add(_.media_id)}),be(f),ye(t),i("product_media",Ge(t),{shouldDirty:!0}),i("explicitly_removed_media_ids",Array.from(f),{shouldDirty:!0})};o.useEffect(()=>{i("explicitly_removed_media_ids",Array.from(ee))},[ee,i]),o.useEffect(()=>{N&&X(!0)},[N]),o.useEffect(()=>{c("is_taxable"),c("price"),c("sale_price"),c("payment_provider"),c("trial_requires_payment_method")},[c]),o.useEffect(()=>{if(!xe){i("trial_period_days",0,{shouldDirty:!1,shouldValidate:!0}),i("trial_requires_payment_method",!1,{shouldDirty:!1,shouldValidate:!0});return}ge<=0&&i("trial_requires_payment_method",!1,{shouldDirty:!1,shouldValidate:!0})},[xe,i,ge]),o.useEffect(()=>{h&&i("payment_provider",h,{shouldDirty:!1,shouldValidate:!0})},[h,i]),o.useEffect(()=>{n&&v[n.code]===void 0&&i("prices",{...v,[n.code]:w||0},{shouldDirty:!1})},[w,n,v,i]);const je=o.useCallback((t,d)=>{const p={...v,[t]:d};i("prices",p,{shouldDirty:!0,shouldValidate:!0}),t===n?.code&&i("price",d,{shouldDirty:!0,shouldValidate:!0})},[n?.code,v,i]),ve=o.useCallback((t,d)=>{const p={...C,[t]:d};i("sale_prices",p,{shouldDirty:!0,shouldValidate:!0}),t===n?.code&&i("sale_price",d,{shouldDirty:!0,shouldValidate:!0})},[n?.code,C,i]),Ne=o.useCallback(()=>{if(!n)return;const t=new Set(E),d=v[n.code]??w??0,p=C[n.code]??V??null,f=u.reduce((S,g)=>{if(g.code!==n.code&&t.has(g.code))return S;const se=Ce.convertMinorUnitAmount({amount:O.majorUnitAmountToMinor(d,n.code),fromCurrencyCode:n.code,toCurrencyCode:g.code,currencies:u,applyRounding:!0});return S[g.code]=O.minorUnitAmountToMajor(se,g.code),S},{}),_=u.reduce((S,g)=>{if(g.code!==n.code&&t.has(g.code))return S;if(typeof p!="number")return(g.code===n.code||!t.has(g.code))&&(S[g.code]=null),S;const se=Ce.convertMinorUnitAmount({amount:O.majorUnitAmountToMinor(p,n.code),fromCurrencyCode:n.code,toCurrencyCode:g.code,currencies:u,applyRounding:!0});return S[g.code]=O.minorUnitAmountToMajor(se,g.code),S},{});i("prices",f,{shouldDirty:!0,shouldValidate:!0}),i("sale_prices",_,{shouldDirty:!0,shouldValidate:!0}),i("price",f[n.code]??d,{shouldDirty:!0,shouldValidate:!0}),i("sale_price",_[n.code]??null,{shouldDirty:!0,shouldValidate:!0})},[u,n,v,C,i,E,w,V]),Oe=o.useCallback(({variationAttributes:t,variants:d})=>{i("variation_attributes",t,{shouldDirty:!0}),i("variants",d,{shouldDirty:!0,shouldValidate:!0})},[i]),Se=async t=>{H(!0),Z(!0),G(null);try{if(!h){const _="Select whether this product is physical or digital before saving.";Q("product_type",{type:"manual",message:_}),r?G(_):alert(_),H(!1),Z(!1);return}const d=j?0:Math.max(0,Number(t.trial_period_days||0)),p={...t,product_type:t.product_type,payment_provider:h,freemius_product_id:j?"":t.freemius_product_id,freemius_plan_id:j?"":t.freemius_plan_id,trial_period_days:d,trial_requires_payment_method:!j&&d>0?t.trial_requires_payment_method:!1,upc:j?t.upc:null,is_taxable:j?t.is_taxable:!1,variation_attributes:j?t.variation_attributes:[],variants:j?t.variants:[]},f=L.sanitizeProductFormValuesForStoreManagedCurrencies(p,u);if(r&&b)await b(f),qe(new Date);else if($)await $(f);else throw new Error("Product form action is not configured.")}catch(d){if(console.error(d),d.message==="NEXT_REDIRECT")return;let p=d.message||"An error occurred while saving.";if(d.code==="23505"){const f=d.message?.toLowerCase()||"";f.includes("products_slug_key")||f.includes("slug")?(p="This slug is already in use. Please choose another one.",Q("slug",{type:"manual",message:p})):(f.includes("products_sku_key")||f.includes("sku"))&&(p="This SKU is already in use.",Q("sku",{type:"manual",message:p}))}r?G(p):alert(p)}finally{H(!1),Z(!1)}},ze=N?"bg-muted/60 text-muted-foreground opacity-70":"",Le=De(D);return e.jsxs("form",{onSubmit:Y(Se),className:"space-y-2.5 pb-4",children:[e.jsx("input",{type:"hidden",...c("translation_group_id")}),e.jsx("input",{type:"hidden",...c("payment_provider")}),e.jsxs("div",{className:"space-y-2.5 w-full",children:[e.jsxs("div",{className:"rounded-lg border bg-card p-2.5 px-4 shadow-sm flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsxs("div",{className:"flex h-9 items-center gap-2",children:[e.jsx("span",{className:"text-sm font-bold whitespace-nowrap leading-none pt-0.5",children:"Product Type"}),x.product_type&&e.jsx(B.AlertCircle,{className:"h-4 w-4 text-destructive"})]}),e.jsx("div",{className:"flex h-9 items-center",children:e.jsxs(a.Select,{onValueChange:t=>i("product_type",t,{shouldDirty:!0,shouldValidate:!0}),value:q||void 0,children:[e.jsx(a.SelectTrigger,{className:"w-[160px] h-9 text-xs",children:e.jsx(a.SelectValue,{placeholder:"Select Type"})}),e.jsxs(a.SelectContent,{children:[e.jsx(a.SelectItem,{value:"physical",children:"Physical Product"}),e.jsx(a.SelectItem,{value:"digital",children:"Digital Product"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsxs("div",{className:"flex h-9 items-center gap-3",children:[e.jsx("span",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider leading-none",children:"Payment Provider"}),e.jsx(a.Badge,{variant:"outline",className:"text-xs py-1 font-bold bg-muted/30 leading-none",children:h?h==="stripe"?"Stripe":"Freemius":"—"})]}),h&&e.jsx("div",{className:"flex h-9 items-center gap-2",children:he&&fe?e.jsxs("span",{className:"flex items-center gap-1.5 text-emerald-600 text-[10px] font-bold bg-emerald-50 px-2 py-1 rounded-full border border-emerald-100 uppercase leading-none",children:[e.jsx(B.CheckCircle2,{className:"h-3 w-3"}),"Ready"]}):e.jsxs("span",{className:"flex items-center gap-1.5 text-amber-600 text-[10px] font-bold bg-amber-50 px-2 py-1 rounded-full border border-amber-100 uppercase leading-none",children:[e.jsx(B.AlertCircle,{className:"h-3 w-3"}),he?"Keys Missing":"Disabled"]})}),!fe&&h&&F[h].missing.length>0&&e.jsxs("a",{href:"/cms/payments",className:"hidden xl:flex h-9 items-center gap-1 text-[10px] text-muted-foreground bg-muted/50 px-2 py-1 rounded border border-dashed leading-none hover:text-foreground hover:border-solid",children:[e.jsx(B.Info,{className:"h-3 w-3"}),"Missing: ",F[h].missing.join(", ")," — set up payments"]})]})]}),e.jsxs(z,{title:"Product Information",hideHeader:!0,children:[r&&e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground pb-2 border-b border-border/40 mb-2.5",children:[e.jsx("span",{className:"font-semibold text-[11px] uppercase tracking-wider text-muted-foreground/80",children:"Product Settings"}),e.jsx("div",{className:"flex items-center gap-1.5 min-h-[16px]",children:Ie?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-amber-400 opacity-75"}),e.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-amber-500"})]}),e.jsx("span",{className:"text-amber-600 dark:text-amber-400 font-medium",children:"Autosaving settings..."})]}):oe?e.jsxs("span",{className:"text-red-500 font-medium",children:["Error saving settings: ",oe]}):ne?e.jsxs("span",{className:"text-emerald-600 dark:text-emerald-400 font-medium",children:["Settings autosaved at ",ne.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})]}):e.jsx("span",{className:"text-muted-foreground/60",children:"Settings autosave in draft mode"})})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-2.5",children:[e.jsxs("div",{className:"col-span-2 space-y-1",children:[e.jsx(a.Label,{htmlFor:"title",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Title"}),e.jsx(a.Input,{id:"title",placeholder:"Product title",...c("title"),className:"h-8 text-sm"}),x.title&&e.jsx("p",{className:"text-destructive text-[11px] leading-none",children:x.title.message})]}),e.jsxs("div",{className:"col-span-2 space-y-1",children:[e.jsx(a.Label,{htmlFor:"slug",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Slug"}),e.jsx(a.Input,{id:"slug",placeholder:"product-slug",...c("slug"),className:"h-8 text-sm"}),x.slug&&e.jsx("p",{className:"text-destructive text-[11px] leading-none",children:x.slug.message})]}),e.jsxs("div",{className:"col-span-1 space-y-1",children:[e.jsx(a.Label,{htmlFor:"sku",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"SKU"}),e.jsx(a.Input,{id:"sku",placeholder:"SKU",...c("sku"),className:"h-8 text-sm font-mono"}),x.sku&&e.jsx("p",{className:"text-destructive text-[11px] leading-none",children:x.sku.message})]}),e.jsxs("div",{className:"col-span-1 space-y-1",children:[e.jsx(a.Label,{htmlFor:"upc_ean",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"UPC / EAN"}),e.jsx(a.Input,{id:"upc_ean",placeholder:"000000000",...c("upc"),className:"h-8 text-sm font-mono",readOnly:N})]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-12 gap-2.5 mt-2",children:[e.jsxs("div",{className:`${r?"lg:col-span-3":"lg:col-span-4"} col-span-2 space-y-1`,children:[e.jsx(a.Label,{htmlFor:"meta_title",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Meta Title"}),e.jsx(a.Input,{id:"meta_title",...c("meta_title"),placeholder:"SEO page title (50-60 chars)",className:"h-8 text-sm"})]}),e.jsxs("div",{className:"lg:col-span-4 col-span-2 space-y-1",children:[e.jsx(a.Label,{htmlFor:"meta_description",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Meta Description"}),e.jsx(a.Input,{id:"meta_description",...c("meta_description"),placeholder:"SEO description (150-160 chars)",className:"h-8 text-sm"})]}),e.jsxs("div",{className:`${r?"lg:col-span-3":"lg:col-span-4"} col-span-2 space-y-1`,children:[e.jsx(a.Label,{htmlFor:"custom_canonical",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Canonical URL (optional)"}),e.jsx(a.Input,{id:"custom_canonical",...c("custom_canonical"),placeholder:"Blank = self-referencing. Absolute https://… URL or /relative path to override.",className:"h-8 text-sm"})]})]})]}),e.jsx(z,{title:"Product Categories",description:"Assign this product to one or more categories.",children:e.jsx(Qe.ProductCategorySelector,{categories:Me,selectedIds:l("category_ids")||[],onChange:t=>i("category_ids",t,{shouldDirty:!0,shouldValidate:!0})})}),e.jsxs("section",{className:"rounded-lg border bg-card p-3 shadow-sm space-y-3",children:[j&&e.jsxs("div",{className:"flex items-center justify-between gap-4 flex-wrap border-b border-muted/50 pb-2",children:[e.jsx("div",{className:"flex items-center gap-4",children:e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("h2",{className:"text-sm font-bold tracking-tight",children:"Pricing & Inventory"}),e.jsx("p",{className:"text-[11px] text-muted-foreground leading-none",children:"Manage simple or variant pricing."})]})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 bg-muted/40 rounded-md px-2.5 py-1.5",children:[e.jsx("span",{className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Stock"}),e.jsx(a.Input,{id:"stock",type:"number",min:"0",...c("stock",{valueAsNumber:!0}),placeholder:"0",readOnly:N,className:`${ze} h-8 w-20 text-sm text-center font-mono bg-background`})]}),N?e.jsx(a.Badge,{variant:"secondary",className:"text-[11px] py-0 px-2 h-5",children:"Variant pricing"}):null]})]}),j?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"w-full",children:[e.jsx(Pe.CurrencyPriceFields,{idPrefix:"product",currencies:u,prices:U.prices,salePrices:U.salePrices,managedCurrencyCodes:E,onPriceChange:je,onSalePriceChange:ve,onAutoFill:Ne,readOnly:N,helperText:N?"Parent prices stay as a fallback, but active variants define the live shopper price.":void 0,trailing:e.jsx(we.SaleScheduleFields,{idPrefix:"product",startAt:l("sale_start_at"),endAt:l("sale_end_at"),onChange:(t,d)=>i(t,d,{shouldDirty:!0,shouldValidate:!0}),error:x.sale_end_at?.message,bare:!0})}),x.price&&e.jsx("p",{className:"text-destructive text-sm mt-1",children:x.price.message}),x.sale_price&&e.jsx("p",{className:"text-destructive text-sm mt-1",children:x.sale_price.message}),x.stock&&e.jsx("p",{className:"text-destructive text-[10px] font-medium leading-none mt-1",children:x.stock.message})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded border border-dashed p-2.5 bg-muted/5",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:N?"Variations Active":"Variations"}),e.jsx(a.Button,{type:"button",variant:J?"outline":"default",onClick:()=>X(t=>!t),size:"sm",className:"h-7 text-xs px-3",children:J?"Hide":"Manage"})]}),J&&e.jsx("div",{className:"border-t pt-3",children:e.jsx(Ye.VariationsEditor,{globalAttributes:P,currentLanguageCode:Ee,baseSku:l("sku")||"",basePrice:w||0,basePrices:v,baseSalePrice:typeof V=="number"?V:null,baseSalePrices:C,currencies:u,availableVariantImages:Le,initialVariationAttributes:s?.variation_attributes,initialVariants:Ue,onChange:Oe})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-end gap-4 w-full",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx(a.Label,{htmlFor:"freemius_product_id",className:"text-[11px] uppercase tracking-wider text-muted-foreground font-bold mb-1.5 block",children:"Freemius Product ID"}),e.jsx(a.Input,{id:"freemius_product_id",...c("freemius_product_id"),className:"h-9"})]}),e.jsxs("div",{className:"flex-1",children:[e.jsx(a.Label,{htmlFor:"freemius_plan_id",className:"text-[11px] uppercase tracking-wider text-muted-foreground font-bold mb-1.5 block",children:"Freemius Plan ID"}),e.jsx(a.Input,{id:"freemius_plan_id",...c("freemius_plan_id"),className:"h-9"})]}),Te?e.jsx(Xe.SyncFreemiusPricingButton,{productId:l("freemius_product_id"),hasOpenDraft:Ve}):null]}),e.jsxs("div",{className:"bg-muted/10 border rounded-md overflow-hidden",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-6 bg-muted/20 border-b p-2.5 px-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground",children:"Free Trial"}),e.jsxs(a.Badge,{variant:"outline",className:"font-mono text-xs shadow-sm bg-background",children:[String(l("trial_period_days")||0)," Days"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground",children:"Card Required"}),e.jsx(a.Badge,{variant:_e?"default":"secondary",className:"text-xs shadow-sm",children:_e?"Yes":"No"})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground ml-auto",children:"Managed in Freemius dashboard"}),e.jsx("input",{type:"hidden",...c("trial_period_days",{valueAsNumber:!0})})]}),e.jsxs("div",{className:"w-full p-4 pt-3 space-y-2",children:[e.jsx(Pe.CurrencyPriceFields,{idPrefix:"product",currencies:u,prices:U.prices,salePrices:U.salePrices,managedCurrencyCodes:E,onPriceChange:je,onSalePriceChange:ve,onAutoFill:Ne,readOnly:!0,trailing:e.jsx(we.SaleScheduleFields,{idPrefix:"product",startAt:l("sale_start_at"),endAt:l("sale_end_at"),onChange:(t,d)=>i(t,d,{shouldDirty:!0,shouldValidate:!0}),error:x.sale_end_at?.message,bare:!0})}),e.jsx("p",{className:"text-[10px] leading-snug text-muted-foreground",children:"Scheduling a sale on a Freemius product generates a time-bounded Freemius coupon so the discount is enforced at Freemius checkout."})]})]})]}),T&&e.jsx("div",{className:"pt-2 border-t",children:T})]})]}),e.jsx(z,{title:"Product Description",hideHeader:!0,children:e.jsx("div",{className:"space-y-2",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx(a.Label,{htmlFor:"short_description",className:"text-xs uppercase font-bold text-muted-foreground tracking-wider leading-none",children:"Short Description"}),e.jsx(a.Input,{id:"short_description",...c("short_description"),placeholder:"Brief summary for product cards...",className:"h-8 text-sm"})]})})}),e.jsxs(z,{title:"Media Gallery",description:"Drag to reorder. First image is the hero.",children:[e.jsx(Je.ProductMediaManager,{initialMedia:D,onUpdate:Be,mediaPickerNode:y}),e.jsx("input",{type:"hidden",...c("product_media")})]}),!r&&e.jsxs("div",{className:"rounded-lg border bg-card p-3 px-4 shadow-sm flex items-center justify-between gap-3 flex-wrap",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"New products start as a draft. Publish it from the top bar once it's ready."}),e.jsx(a.Button,{disabled:R,type:"submit",size:"sm",className:"h-8 text-sm px-5",children:R?"Saving...":"Save Changes"})]})]})]})}exports.ProductForm=ss;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),d=require("lucide-react"),I=require("next/image"),f=process.env.NEXT_PUBLIC_R2_BASE_URL||"",h=o=>o?o.startsWith("http")||!f?o:`${f.replace(/\/+$/,"")}/${o.replace(/^\/+/,"")}`:"",_=({initialMedia:o,onUpdate:g,mediaPickerNode:p})=>{const[n,u]=i.useState(o),c=i.useRef(null),m=i.useRef(null);i.useEffect(()=>{u(o)},[o]);const x=(e,r)=>{c.current=r,e.dataTransfer.effectAllowed="move"},v=(e,r)=>{m.current=r,e.preventDefault()},b=e=>{e.preventDefault()},j=e=>{if(e.preventDefault(),c.current===null||m.current===null)return;const r=[...n],s=r[c.current];r.splice(c.current,1),r.splice(m.current,0,s),c.current=null,m.current=null;const a=r.map((l,N)=>({...l,sort_order:N}));u(a),g(a)},y=e=>{if(!e||n.some(a=>a.media_id===e.id))return;const r={id:`temp-${Date.now()}`,media_id:e.id,file_path:e.file_path||e.object_key,alt:e.description||e.file_name||"",sort_order:n.length,isNew:!0},s=[...n,r];u(s),g(s)},w=e=>{const s=n.filter((a,l)=>l!==e).map((a,l)=>({...a,sort_order:l}));u(s),g(s)};return t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4",children:[n.map((e,r)=>t.jsxs("div",{className:"group relative aspect-square bg-muted/40 rounded-lg border overflow-hidden cursor-move transition-all hover:shadow-md",draggable:!0,onDragStart:s=>x(s,r),onDragEnter:s=>v(s,r),onDragOver:b,onDrop:j,children:[r===0&&t.jsx("div",{className:"absolute top-2 left-2 z-10 bg-primary text-primary-foreground text-[10px] font-bold px-2 py-0.5 rounded shadow-sm",children:"MAIN"}),t.jsx("button",{type:"button",onClick:()=>w(r),className:"absolute top-1 right-1 z-20 p-1 bg-destructive/90 text-destructive-foreground rounded-full opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(d.X,{className:"w-3 h-3"})}),t.jsx("div",{className:"absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors pointer-events-none"}),t.jsx("div",{className:"absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(d.GripVertical,{className:"w-4 h-4 text-white drop-shadow-md"})}),h(e.file_path)?t.jsx(I,{src:h(e.file_path),alt:e.alt,fill:!0,className:"object-cover",sizes:"(max-width: 768px) 50vw, 33vw"}):t.jsx("div",{className:"flex h-full w-full items-center justify-center text-muted-foreground",children:t.jsx(d.Image,{className:"w-8 h-8 opacity-30"})})]},e.id)),p?i.cloneElement(p,{onSelect:y,children:t.jsxs("button",{type:"button",className:"group relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground hover:bg-muted/20 hover:border-muted-foreground/50 transition-all focus:outline-none focus:ring-2 focus:ring-primary",children:[t.jsx(d.Image,{className:"w-8 h-8 mb-2 opacity-50 group-hover:opacity-75 transition-opacity"}),t.jsx("span",{className:"text-sm font-medium",children:"Add Image"})]})}):t.jsxs("div",{className:"relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground",children:[t.jsx(d.Image,{className:"w-8 h-8 mb-2 opacity-30"}),t.jsx("span",{className:"text-xs text-center px-2",children:"Media Picker not injected"})]})]}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Drag and drop images to reorder. The first image will be used as the main product image."})]})};exports.ProductMediaManager=_;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),K=require("next/image"),y=require("next/link"),W=require("next/navigation"),i=require("react"),x=require("lucide-react"),t=require("@nextblock-cms/ui"),A=require("@nextblock-cms/utils"),X=require("./DeleteProductButton.cjs.js"),R=process.env.NEXT_PUBLIC_R2_BASE_URL||"";function G(n){return n?n.startsWith("http")||!R?n:`${R.replace(/\/+$/,"")}/${n.replace(/^\/+/,"")}`:null}function J({products:n,languageLabels:N,defaultCurrencyCode:k,deleteProductAction:E,bulkDeleteProductsAction:H,bulkDraftProductsAction:I}){const $=W.useRouter(),[o,m]=i.useState(()=>new Set),[g,q]=i.useState(""),[C,f]=i.useState(null),[j,p]=i.useState(null),[P,z]=i.useTransition(),T=i.useMemo(()=>{const s=g.trim().toLowerCase();return s?n.filter(l=>{const r=N[String(l.language_id)]||"";return[l.title,l.sku,l.slug,l.status,r].filter(Boolean).join(" ").toLowerCase().includes(s)}):n},[N,n,g]),[L,b]=i.useState(1),[c,V]=i.useState(25);i.useEffect(()=>{b(1)},[g]);const S=T.length,v=Math.max(1,Math.ceil(S/c)),d=Math.min(L,v),w=i.useMemo(()=>{const s=(d-1)*c;return T.slice(s,s+c)},[T,d,c]),B=i.useMemo(()=>n.map(s=>s.id),[n]),u=i.useMemo(()=>w.map(s=>s.id),[w]),h=i.useMemo(()=>n.filter(s=>o.has(s.id)),[n,o]).length,D=h>1,U=u.filter(s=>o.has(s)).length,_=u.length>0&&u.every(s=>o.has(s)),Q=U>0&&!_;i.useEffect(()=>{const s=new Set(B);m(l=>{const r=new Set(Array.from(l).filter(a=>s.has(a)));return r.size===l.size?l:r})},[B]);const O=s=>{m(l=>{const r=new Set(l);return s?u.forEach(a=>r.add(a)):u.forEach(a=>r.delete(a)),r})},F=(s,l)=>{m(r=>{const a=new Set(r);return l?a.add(s):a.delete(s),a})},M=(s,l,r)=>{if(h===0){f("Select at least one product first.");return}window.confirm(l)&&(f(null),p(s),z(async()=>{try{const a=await r(Array.from(o));if(!a.success){f(a.error||"Bulk action failed. Please try again."),p(null);return}m(new Set),$.refresh()}catch(a){console.error("Bulk product action failed:",a),f("Bulk action failed. Please try again.")}finally{p(null)}}))};return e.jsxs("div",{className:"rounded-lg border overflow-hidden dark:border-slate-700",children:[e.jsxs("div",{className:"flex min-h-14 flex-wrap items-center justify-between gap-3 border-b bg-muted/20 px-4 py-3",children:[e.jsxs("div",{className:"flex min-w-[260px] flex-1 flex-wrap items-center gap-3",children:[e.jsxs("div",{className:"relative w-full max-w-sm",children:[e.jsx(x.Search,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(t.Input,{value:g,onChange:s=>q(s.target.value),placeholder:"Search products...",className:"h-9 pl-9","aria-label":"Search products"})]}),h>0?e.jsxs("span",{className:"text-sm font-medium text-foreground",children:[h," selected"]}):null,C?e.jsx("span",{className:"text-sm text-destructive",children:C}):null]}),D?e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(t.Button,{variant:"outline",size:"sm",disabled:P,onClick:()=>M("Moving to draft...",`Move ${h} selected products to draft?`,I),children:[e.jsx(x.Archive,{className:"mr-2 h-4 w-4"}),j==="Moving to draft..."?j:"Set Draft"]}),e.jsxs(t.Button,{variant:"destructive",size:"sm",disabled:P,onClick:()=>M("Deleting...",`Delete ${h} selected products? This action cannot be undone.`,H),children:[e.jsx(x.Trash2,{className:"mr-2 h-4 w-4"}),j==="Deleting..."?j:"Delete"]})]}):null]}),e.jsxs(t.Table,{children:[e.jsx(t.TableHeader,{children:e.jsxs(t.TableRow,{children:[e.jsx(t.TableHead,{className:"w-12",children:e.jsx(t.Checkbox,{checked:_?!0:Q?"indeterminate":!1,onCheckedChange:s=>O(s===!0),"aria-label":"Select all products on this page"})}),e.jsx(t.TableHead,{children:"Image"}),e.jsx(t.TableHead,{children:"Title"}),e.jsx(t.TableHead,{children:"SKU"}),e.jsx(t.TableHead,{children:"Price"}),e.jsx(t.TableHead,{children:"Language"}),e.jsx(t.TableHead,{children:"SEO"}),e.jsx(t.TableHead,{children:"Stock"}),e.jsx(t.TableHead,{children:"Status"}),e.jsx(t.TableHead,{className:"text-right",children:"Actions"})]})}),e.jsx(t.TableBody,{children:w.length>0?w.map(s=>{const l=G(s.product_media?.[0]?.media?.file_path||s.product_media?.[0]?.media?.object_key);return e.jsxs(t.TableRow,{"data-state":o.has(s.id)?"selected":void 0,children:[e.jsx(t.TableCell,{children:e.jsx(t.Checkbox,{checked:o.has(s.id),onCheckedChange:r=>F(s.id,r===!0),"aria-label":`Select ${s.title}`})}),e.jsx(t.TableCell,{children:l?e.jsx(K,{src:l,alt:s.title,width:40,height:40,className:"w-10 h-10 object-cover rounded"}):e.jsx("div",{className:"w-10 h-10 bg-gray-200 rounded flex items-center justify-center text-xs text-gray-500",children:"No Img"})}),e.jsx(t.TableCell,{className:"font-medium",children:e.jsx(y,{href:`/cms/products/${s.id}/edit`,className:"hover:underline",children:s.title})}),e.jsx(t.TableCell,{children:s.sku}),e.jsx(t.TableCell,{children:e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:s.sale_price?"font-semibold text-primary":"",children:typeof(s.sale_price??s.price)=="number"?A.formatPrice(s.sale_price??s.price??0,k):"N/A"}),s.sale_price?e.jsx("span",{className:"text-sm text-muted-foreground line-through",children:A.formatPrice(s.price??0,k)}):null]})}),e.jsx(t.TableCell,{children:e.jsx(t.Badge,{variant:"outline",children:N[String(s.language_id)]||"N/A"})}),e.jsx(t.TableCell,{children:e.jsx(t.SeoScoreBadge,{score:s.seo_score})}),e.jsx(t.TableCell,{children:s.stock}),e.jsx(t.TableCell,{children:e.jsx("span",{className:`px-2 py-1 rounded text-xs ${s.status==="active"?"bg-green-100 text-green-800":s.status==="archived"?"bg-gray-100 text-gray-800":"bg-yellow-100 text-yellow-800"}`,children:s.status})}),e.jsxs(t.TableCell,{className:"text-right flex justify-end gap-2 items-center",children:[s.slug?e.jsx(y,{href:`/product/${s.slug}`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(t.Button,{variant:"outline",size:"sm",children:"View Product"})}):null,e.jsx(y,{href:`/cms/products/${s.id}/edit`,children:e.jsx(t.Button,{variant:"ghost",size:"sm",children:"Edit"})}),e.jsx(X.DeleteProductButton,{productName:s.title,isIcon:!0,deleteAction:()=>E(s.id)})]})]},s.id)}):e.jsx(t.TableRow,{children:e.jsx(t.TableCell,{colSpan:10,className:"text-center py-10",children:n.length===0?"No products found.":"No products match your search."})})})]}),S>0&&e.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between gap-4 px-2 py-4 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{children:"Rows per page:"}),e.jsxs(t.Select,{value:String(c),onValueChange:s=>{V(Number(s)),b(1)},children:[e.jsx(t.SelectTrigger,{className:"h-8 w-[70px]",children:e.jsx(t.SelectValue,{placeholder:String(c)})}),e.jsx(t.SelectContent,{side:"top",children:[10,25,50,100].map(s=>e.jsx(t.SelectItem,{value:String(s),children:s},s))})]}),e.jsxs("span",{className:"ml-2",children:["Showing ",(d-1)*c+1," to ",Math.min(d*c,S)," of ",S," products"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{children:["Page ",d," of ",v]}),e.jsx(t.Button,{variant:"outline",size:"sm",className:"h-8 w-8 p-0",onClick:()=>b(s=>Math.max(1,s-1)),disabled:d<=1,"aria-label":"Previous page",children:e.jsx(x.ChevronLeft,{className:"h-4 w-4"})}),e.jsx(t.Button,{variant:"outline",size:"sm",className:"h-8 w-8 p-0",onClick:()=>b(s=>Math.min(v,s+1)),disabled:d>=v,"aria-label":"Next page",children:e.jsx(x.ChevronRight,{className:"h-4 w-4"})})]})]})]})}exports.ProductsBulkTable=J;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("@nextblock-cms/ui"),h=require("@nextblock-cms/utils"),c=t=>String(t).padStart(2,"0");function d(t){if(!t)return"";const a=new Date(t);return Number.isNaN(a.getTime())?"":`${a.getFullYear()}-${c(a.getMonth()+1)}-${c(a.getDate())}T${c(a.getHours())}:${c(a.getMinutes())}`}function o(t){if(!t)return null;const a=new Date(t);return Number.isNaN(a.getTime())?null:a.toISOString()}function f({idPrefix:t="product",startAt:a,endAt:x,onChange:n,error:r,disabled:u,description:m,dense:i,bare:p}){const N=Intl.DateTimeFormat().resolvedOptions().timeZone,g=h.cn("h-7 text-xs",i||p?"w-[150px]":"w-[160px] sm:w-[180px]"),j=e.jsxs(e.Fragment,{children:[e.jsx(s.Label,{htmlFor:`${t}-sale-start-at`,className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:"Starts"}),e.jsx(s.Input,{id:`${t}-sale-start-at`,type:"datetime-local",value:d(a),disabled:u,onChange:l=>n("sale_start_at",o(l.target.value)),className:g}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"→"}),e.jsx(s.Label,{htmlFor:`${t}-sale-end-at`,className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:"Ends"}),e.jsx(s.Input,{id:`${t}-sale-end-at`,type:"datetime-local",value:d(x),disabled:u,onChange:l=>n("sale_end_at",o(l.target.value)),className:g})]});return p?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(s.Label,{htmlFor:`${t}-sale-start-at`,className:"block text-[10px] uppercase font-bold tracking-widest text-muted-foreground",children:"Starts"}),e.jsx(s.Input,{id:`${t}-sale-start-at`,type:"datetime-local",value:d(a),disabled:u,onChange:l=>n("sale_start_at",o(l.target.value)),className:"h-8 w-full text-xs"})]}),e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(s.Label,{htmlFor:`${t}-sale-end-at`,className:"block text-[10px] uppercase font-bold tracking-widest text-muted-foreground",children:"Ends"}),e.jsx(s.Input,{id:`${t}-sale-end-at`,type:"datetime-local",value:d(x),disabled:u,onChange:l=>n("sale_end_at",o(l.target.value)),className:"h-8 w-full text-xs"}),r?e.jsx("p",{className:"mt-0.5 text-[10px] text-destructive",children:r}):null]})]}):e.jsxs("div",{className:h.cn("rounded border border-dashed bg-muted/5 space-y-1",i?"p-1.5":"p-2"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1.5",children:[e.jsx("span",{className:"shrink-0 text-[11px] font-bold uppercase tracking-wider text-muted-foreground",children:"Sale window"}),j,e.jsxs("span",{className:"ml-auto text-[10px] text-muted-foreground",children:[N||"local time"," · empty = always on"]})]}),m&&!i?e.jsx("p",{className:"text-[10px] leading-snug text-muted-foreground",children:m}):null,r?e.jsx("p",{className:"text-[11px] text-destructive",children:r}):null]})}exports.SaleScheduleFields=f;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),i=require("react"),u=require("@nextblock-cms/ui"),a=require("lucide-react"),t=require("sonner"),l=require("../actions.cjs.js");function d({title:c="Sync Full Store"}){const[r,s]=i.useState(!1),o=async()=>{s(!0);try{const e=await l.triggerFreemiusSync();e.error?t.toast.error(e.error):t.toast.success(`Full store sync complete! Found ${e.data?.count||0} products.`)}catch(e){t.toast.error(e.message||"An unexpected error occurred during sync")}finally{s(!1)}};return n.jsxs(u.Button,{variant:"secondary",onClick:o,disabled:r,className:"gap-2",children:[n.jsx(a.RefreshCw,{className:`w-4 h-4 ${r?"animate-spin":""}`}),r?"Syncing...":c]})}exports.SyncFreemiusButton=d;
|