@nextblock-cms/ecom 0.20.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/_virtual/_rolldown/runtime.cjs.js +1 -0
  2. package/index.cjs.js +1 -1
  3. package/index.es.js +38 -146
  4. package/lib/CurrencyProvider.cjs.js +1 -1
  5. package/lib/CurrencyProvider.d.ts +1 -1
  6. package/lib/CurrencyProvider.es.js +85 -95
  7. package/lib/PaymentReadinessProvider.cjs.js +1 -1
  8. package/lib/PaymentReadinessProvider.d.ts +1 -1
  9. package/lib/PaymentReadinessProvider.es.js +24 -27
  10. package/lib/cart-store.cjs.js +1 -1
  11. package/lib/cart-store.es.js +109 -121
  12. package/lib/components/AccountNavigationMenu.cjs.js +1 -1
  13. package/lib/components/AccountNavigationMenu.d.ts +1 -1
  14. package/lib/components/AccountNavigationMenu.es.js +36 -50
  15. package/lib/components/AddToCartButton.cjs.js +1 -1
  16. package/lib/components/AddToCartButton.d.ts +1 -1
  17. package/lib/components/AddToCartButton.es.js +94 -89
  18. package/lib/components/Cart.cjs.js +1 -1
  19. package/lib/components/Cart.d.ts +1 -1
  20. package/lib/components/Cart.es.js +261 -180
  21. package/lib/components/CartDrawer.cjs.js +1 -1
  22. package/lib/components/CartDrawer.d.ts +1 -1
  23. package/lib/components/CartDrawer.es.js +218 -148
  24. package/lib/components/CartIcon.cjs.js +1 -1
  25. package/lib/components/CartIcon.d.ts +1 -1
  26. package/lib/components/CartIcon.es.js +33 -35
  27. package/lib/components/Checkout.cjs.js +1 -1
  28. package/lib/components/Checkout.d.ts +1 -1
  29. package/lib/components/Checkout.es.js +1092 -1108
  30. package/lib/components/CouponForm.cjs.js +1 -1
  31. package/lib/components/CouponForm.d.ts +1 -1
  32. package/lib/components/CouponForm.es.js +136 -148
  33. package/lib/components/CurrencySwitcher.cjs.js +1 -1
  34. package/lib/components/CurrencySwitcher.d.ts +1 -1
  35. package/lib/components/CurrencySwitcher.es.js +22 -18
  36. package/lib/components/CustomerProfileForm.cjs.js +1 -1
  37. package/lib/components/CustomerProfileForm.es.js +454 -313
  38. package/lib/components/FeaturedProduct.cjs.js +1 -1
  39. package/lib/components/FeaturedProduct.d.ts +1 -1
  40. package/lib/components/FeaturedProduct.es.js +98 -83
  41. package/lib/components/FreemiusLicensePanel.cjs.js +1 -1
  42. package/lib/components/FreemiusLicensePanel.d.ts +1 -1
  43. package/lib/components/FreemiusLicensePanel.es.js +70 -65
  44. package/lib/components/InvoiceDocument.cjs.js +1 -1
  45. package/lib/components/InvoiceDocument.es.js +256 -192
  46. package/lib/components/InvoiceViewerShell.cjs.js +2 -2
  47. package/lib/components/InvoiceViewerShell.d.ts +1 -1
  48. package/lib/components/InvoiceViewerShell.es.js +75 -106
  49. package/lib/components/ProductCard.cjs.js +1 -1
  50. package/lib/components/ProductCard.d.ts +1 -1
  51. package/lib/components/ProductCard.es.js +186 -171
  52. package/lib/components/ProductDetailsLayout.cjs.js +1 -1
  53. package/lib/components/ProductDetailsLayout.es.js +405 -404
  54. package/lib/components/ProductGallery.cjs.js +1 -1
  55. package/lib/components/ProductGallery.d.ts +1 -1
  56. package/lib/components/ProductGallery.es.js +51 -54
  57. package/lib/components/ProductGrid.cjs.js +1 -1
  58. package/lib/components/ProductGrid.d.ts +1 -1
  59. package/lib/components/ProductGrid.es.js +23 -25
  60. package/lib/components/ShippingEstimator.cjs.js +1 -1
  61. package/lib/components/ShippingEstimator.d.ts +1 -1
  62. package/lib/components/ShippingEstimator.es.js +158 -153
  63. package/lib/components/ShortDescription.cjs.js +1 -1
  64. package/lib/components/ShortDescription.es.js +17 -17
  65. package/lib/components/SimpleTiptapRenderer.cjs.js +1 -1
  66. package/lib/components/SimpleTiptapRenderer.es.js +238 -211
  67. package/lib/components/SubscriptionSelector.cjs.js +1 -1
  68. package/lib/components/SubscriptionSelector.es.js +159 -154
  69. package/lib/countries.cjs.js +1 -1
  70. package/lib/countries.es.js +232 -75
  71. package/lib/coupon-server.cjs.js +1 -1
  72. package/lib/coupon-server.es.js +180 -224
  73. package/lib/coupons.cjs.js +1 -1
  74. package/lib/coupons.es.js +12 -14
  75. package/lib/currency-constants.cjs.js +1 -1
  76. package/lib/currency-constants.es.js +4 -4
  77. package/lib/currency-rest-client.cjs.js +1 -1
  78. package/lib/currency-rest-client.es.js +15 -22
  79. package/lib/currency-store.cjs.js +1 -1
  80. package/lib/currency-store.es.js +20 -27
  81. package/lib/currency-sync.cjs.js +1 -1
  82. package/lib/currency-sync.es.js +124 -170
  83. package/lib/currency.cjs.js +1 -1
  84. package/lib/currency.es.js +242 -310
  85. package/lib/customer-addresses.cjs.js +1 -1
  86. package/lib/customer-addresses.es.js +80 -109
  87. package/lib/customer-orders.cjs.js +1 -1
  88. package/lib/customer-orders.es.js +31 -43
  89. package/lib/customer.cjs.js +1 -1
  90. package/lib/customer.es.js +43 -52
  91. package/lib/export-helpers.cjs.js +1 -1
  92. package/lib/export-helpers.es.js +53 -52
  93. package/lib/factory.cjs.js +1 -1
  94. package/lib/factory.es.js +10 -7
  95. package/lib/freemius-coupons.cjs.js +1 -1
  96. package/lib/freemius-coupons.es.js +245 -262
  97. package/lib/freemius-license-claim.cjs.js +1 -1
  98. package/lib/freemius-license-claim.es.js +87 -71
  99. package/lib/freemius-license.cjs.js +1 -1
  100. package/lib/freemius-license.es.js +32 -39
  101. package/lib/freemius-order-sync.cjs.js +1 -1
  102. package/lib/freemius-order-sync.es.js +226 -290
  103. package/lib/freemius-trial-provision.cjs.js +1 -1
  104. package/lib/freemius-trial-provision.es.js +136 -130
  105. package/lib/inventory-settings.cjs.js +1 -1
  106. package/lib/inventory-settings.es.js +69 -77
  107. package/lib/invoice-server.cjs.js +3 -3
  108. package/lib/invoice-server.es.js +94 -141
  109. package/lib/invoice-ui.cjs.js +1 -1
  110. package/lib/invoice-ui.es.js +50 -66
  111. package/lib/invoice.cjs.js +1 -1
  112. package/lib/invoice.es.js +85 -94
  113. package/lib/order-inventory.cjs.js +25 -25
  114. package/lib/order-inventory.es.js +67 -79
  115. package/lib/order-tax-details.cjs.js +1 -1
  116. package/lib/order-tax-details.es.js +142 -153
  117. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +1 -1
  118. package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
  119. package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
  120. package/lib/pages/cms/coupons/CouponsPage.cjs.js +2 -2
  121. package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
  122. package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
  123. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +1 -1
  124. package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
  125. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
  126. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +1 -1
  127. package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
  128. package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
  129. package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +1 -1
  130. package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
  131. package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
  132. package/lib/pages/cms/coupons/actions.cjs.js +1 -1
  133. package/lib/pages/cms/coupons/actions.es.js +112 -115
  134. package/lib/pages/cms/coupons/index.cjs.js +1 -0
  135. package/lib/pages/cms/coupons/index.es.js +3 -0
  136. package/lib/pages/cms/coupons/product-options.cjs.js +1 -1
  137. package/lib/pages/cms/coupons/product-options.es.js +21 -23
  138. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +1 -1
  139. package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
  140. package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
  141. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +1 -1
  142. package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
  143. package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
  144. package/lib/pages/cms/orders/OrderPrintButton.cjs.js +1 -1
  145. package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
  146. package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
  147. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +1 -1
  148. package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
  149. package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
  150. package/lib/pages/cms/orders/OrdersPage.cjs.js +1 -1
  151. package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
  152. package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
  153. package/lib/pages/cms/orders/actions.cjs.js +3 -3
  154. package/lib/pages/cms/orders/actions.es.js +53 -69
  155. package/lib/pages/cms/orders/export-actions.cjs.js +1 -1
  156. package/lib/pages/cms/orders/export-actions.es.js +23 -26
  157. package/lib/pages/cms/orders/index.cjs.js +1 -0
  158. package/lib/pages/cms/orders/index.es.js +6 -0
  159. package/lib/pages/cms/orders/server-actions.cjs.js +1 -1
  160. package/lib/pages/cms/orders/server-actions.es.js +60 -51
  161. package/lib/pages/cms/payments/PaymentsClient.cjs.js +1 -1
  162. package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
  163. package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
  164. package/lib/pages/cms/payments/PaymentsPage.cjs.js +1 -1
  165. package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
  166. package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
  167. package/lib/pages/cms/payments/actions.cjs.js +1 -1
  168. package/lib/pages/cms/payments/actions.es.js +38 -48
  169. package/lib/pages/cms/payments/index.cjs.js +1 -0
  170. package/lib/pages/cms/payments/index.es.js +3 -0
  171. package/lib/pages/cms/payments/queries.cjs.js +1 -1
  172. package/lib/pages/cms/payments/queries.es.js +38 -48
  173. package/lib/pages/cms/products/ProductsPage.cjs.js +1 -1
  174. package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
  175. package/lib/pages/cms/products/ProductsPage.es.js +63 -66
  176. package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
  177. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +1 -1
  178. package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +138 -155
  179. package/lib/pages/cms/products/actions.cjs.js +4 -4
  180. package/lib/pages/cms/products/actions.es.js +121 -162
  181. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +1 -1
  182. package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
  183. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
  184. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +1 -1
  185. package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
  186. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
  187. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +1 -1
  188. package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
  189. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
  190. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +1 -1
  191. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
  192. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +1 -1
  193. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
  194. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +1 -1
  195. package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
  196. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
  197. package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +1 -1
  198. package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
  199. package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
  200. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +1 -1
  201. package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
  202. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
  203. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +1 -1
  204. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
  205. package/lib/pages/cms/products/components/ProductForm.cjs.js +1 -1
  206. package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
  207. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +1 -1
  208. package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
  209. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +1 -1
  210. package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
  211. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
  212. package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +1 -1
  213. package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
  214. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
  215. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +1 -1
  216. package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
  217. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
  218. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +2 -2
  219. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
  220. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
  221. package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
  222. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +1 -1
  223. package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
  224. package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
  225. package/lib/pages/cms/products/index.cjs.js +1 -0
  226. package/lib/pages/cms/products/index.es.js +8 -0
  227. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +1 -1
  228. package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
  229. package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
  230. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +2 -2
  231. package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
  232. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
  233. package/lib/pages/cms/products/inventory/actions.cjs.js +3 -3
  234. package/lib/pages/cms/products/inventory/actions.es.js +83 -91
  235. package/lib/pages/cms/products/new/NewProductPage.cjs.js +1 -1
  236. package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
  237. package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
  238. package/lib/pages/cms/products/product-price-sync.cjs.js +1 -1
  239. package/lib/pages/cms/products/product-price-sync.es.js +74 -89
  240. package/lib/pages/cms/products/server-actions.cjs.js +1 -1
  241. package/lib/pages/cms/products/server-actions.es.js +250 -233
  242. package/lib/pages/cms/shipping/ShippingPage.cjs.js +2 -2
  243. package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
  244. package/lib/pages/cms/shipping/components/RateForm.cjs.js +1 -1
  245. package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
  246. package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
  247. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +1 -1
  248. package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
  249. package/lib/pages/cms/shipping/index.cjs.js +1 -0
  250. package/lib/pages/cms/shipping/index.es.js +3 -0
  251. package/lib/pages/cms/shipping/server-actions.cjs.js +1 -1
  252. package/lib/pages/cms/shipping/server-actions.es.js +131 -149
  253. package/lib/pages/cms/taxes/TaxesPage.cjs.js +1 -1
  254. package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
  255. package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
  256. package/lib/pages/cms/taxes/actions.cjs.js +1 -1
  257. package/lib/pages/cms/taxes/actions.es.js +41 -53
  258. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +1 -1
  259. package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
  260. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
  261. package/lib/pages/cms/taxes/index.cjs.js +1 -0
  262. package/lib/pages/cms/taxes/index.es.js +3 -0
  263. package/lib/payment-config.cjs.js +1 -1
  264. package/lib/payment-config.es.js +110 -126
  265. package/lib/product-actions.cjs.js +4 -4
  266. package/lib/product-actions.es.js +289 -544
  267. package/lib/product-context.cjs.js +1 -1
  268. package/lib/product-context.es.js +13 -15
  269. package/lib/product-schema.cjs.js +1 -1
  270. package/lib/product-schema.es.js +99 -134
  271. package/lib/providers/freemius.cjs.js +1 -5
  272. package/lib/providers/freemius.es.js +446 -530
  273. package/lib/providers/stripe.cjs.js +1 -1
  274. package/lib/providers/stripe.es.js +417 -477
  275. package/lib/server-actions/coupon-actions.cjs.js +1 -1
  276. package/lib/server-actions/coupon-actions.es.js +22 -22
  277. package/lib/server-actions/customer-actions.cjs.js +1 -1
  278. package/lib/server-actions/customer-actions.es.js +26 -28
  279. package/lib/server-actions/product-actions.cjs.js +1 -1
  280. package/lib/server-actions/product-actions.es.js +9 -15
  281. package/lib/server-actions/shipping-actions.cjs.js +1 -1
  282. package/lib/server-actions/shipping-actions.es.js +27 -24
  283. package/lib/server-actions/tax-actions.cjs.js +1 -1
  284. package/lib/server-actions/tax-actions.es.js +33 -39
  285. package/lib/shared-inventory.cjs.js +2 -2
  286. package/lib/shared-inventory.es.js +111 -160
  287. package/lib/shipping/resolver.cjs.js +2 -2
  288. package/lib/shipping/resolver.es.js +44 -61
  289. package/lib/shipping-rate-currency.cjs.js +1 -1
  290. package/lib/shipping-rate-currency.es.js +52 -67
  291. package/lib/states.cjs.js +1 -1
  292. package/lib/states.es.js +333 -154
  293. package/lib/stripe/checkout.cjs.js +1 -1
  294. package/lib/stripe/checkout.es.js +125 -181
  295. package/lib/stripe/client.cjs.js +1 -1
  296. package/lib/stripe/client.es.js +14 -19
  297. package/lib/stripe/order-sync.cjs.js +1 -1
  298. package/lib/stripe/order-sync.es.js +106 -126
  299. package/lib/stripe/webhooks.cjs.js +1 -1
  300. package/lib/stripe/webhooks.es.js +37 -31
  301. package/lib/tax-calculation.cjs.js +1 -1
  302. package/lib/tax-calculation.es.js +84 -98
  303. package/lib/trials.cjs.js +1 -1
  304. package/lib/trials.es.js +24 -30
  305. package/lib/types.cjs.js +1 -1
  306. package/lib/types.es.js +21 -27
  307. package/lib/use-cart.cjs.js +1 -1
  308. package/lib/use-cart.es.js +38 -40
  309. package/lib/use-price-formatter.cjs.js +1 -1
  310. package/lib/use-price-formatter.es.js +10 -11
  311. package/lib/variation-utils.cjs.js +1 -1
  312. package/lib/variation-utils.es.js +199 -261
  313. package/lib/zod-config.cjs.js +1 -1
  314. package/lib/zod-config.es.js +5 -6
  315. package/package.json +16 -16
  316. package/server.cjs.js +1 -1
  317. package/server.es.js +56 -211
@@ -1,172 +1,187 @@
1
- 'use client';
2
- import { jsxs as l, jsx as r, Fragment as T } from "react/jsx-runtime";
3
- import { AddToCartButton as M } from "./AddToCartButton.es.js";
4
- import { useTranslations as $, majorUnitAmountToMinor as N, cn as _ } from "@nextblock-cms/utils";
5
- import { usePriceFormatter as E } from "../use-price-formatter.es.js";
6
- import y from "next/link";
7
- import { useCurrency as z } from "../CurrencyProvider.es.js";
8
- import { resolvePriceRangeForCurrency as B, resolveEffectivePriceForCurrency as P, resolvePriceForCurrency as w } from "../currency.es.js";
9
- import { getTrialSummary as q } from "../trials.es.js";
10
- import { resolveTranslatedText as U } from "../variation-utils.es.js";
11
- const X = ({ product: e, className: C, priority: S = !1 }) => {
12
- const t = E(), { activeCurrencyCode: s, currencies: c } = z(), n = B({
13
- entries: e.variants?.length ? e.variants : e.product_variants?.length ? e.product_variants : [],
14
- currencyCode: s,
15
- currencies: c
16
- }), g = !!(e.has_variants && n), m = P({
17
- prices: e.prices,
18
- salePrices: e.sale_prices,
19
- fallbackPrice: e.price,
20
- fallbackSalePrice: e.sale_price,
21
- saleStartAt: e.sale_start_at,
22
- saleEndAt: e.sale_end_at,
23
- scheduledPrice: e.scheduled_price,
24
- scheduledPrices: e.scheduled_prices,
25
- scheduledPriceAt: e.scheduled_price_at,
26
- currencyCode: s,
27
- currencies: c
28
- }), k = g && n ? n.min === n.max ? t(n.min, s) : `${t(n.min, s)} - ${t(
29
- n.max,
30
- s
31
- )}` : t(m.sale_price ?? m.price, s), j = e.variants?.length ? e.variants : e.product_variants?.length ? e.product_variants : [], A = g ? j.some(
32
- (a) => P({
33
- prices: a.prices,
34
- salePrices: a.sale_prices,
35
- fallbackPrice: a.price,
36
- fallbackSalePrice: a.sale_price,
37
- saleStartAt: a.sale_start_at,
38
- saleEndAt: a.sale_end_at,
39
- scheduledPrice: a.scheduled_price,
40
- scheduledPrices: a.scheduled_prices,
41
- scheduledPriceAt: a.scheduled_price_at,
42
- currencyCode: s,
43
- currencies: c
44
- }).sale_price != null
45
- ) : m.sale_price != null, { t: i, lang: F } = $(), x = i("ecommerce.on_sale"), R = x === "ecommerce.on_sale" ? "On Sale" : x, u = q(e, i), o = e.freemius_plans?.[0]?.freemius_pricing?.[0], d = c.find((a) => a.is_default)?.code || "USD", p = o?.override_monthly_price ?? o?.api_monthly_price, v = o?.override_annual_price ?? o?.api_annual_price, h = typeof p == "number" ? w({
46
- prices: {
47
- [d]: N(
48
- p,
49
- d
50
- )
51
- },
52
- currencyCode: s,
53
- currencies: c
54
- }) : null, f = typeof v == "number" ? w({
55
- prices: {
56
- [d]: N(
57
- v,
58
- d
59
- )
60
- },
61
- currencyCode: s,
62
- currencies: c
63
- }) : null;
64
- return /* @__PURE__ */ l("div", { className: _("group relative flex flex-col overflow-hidden rounded-lg border bg-card text-card-foreground shadow-sm transition-shadow hover:shadow-md", C), children: [
65
- /* @__PURE__ */ l(
66
- y,
67
- {
68
- href: `/product/${e.slug}`,
69
- tabIndex: -1,
70
- "aria-hidden": "true",
71
- className: "relative aspect-square overflow-hidden bg-muted",
72
- children: [
73
- A && /* @__PURE__ */ r("span", { className: "absolute left-3 top-3 z-10 rounded-full bg-destructive px-2.5 py-1 text-[10px] font-bold uppercase tracking-wider text-destructive-foreground shadow-sm", children: R }),
74
- e.image_url ? /* @__PURE__ */ r(
75
- "img",
76
- {
77
- src: e.image_url,
78
- alt: "",
79
- width: 600,
80
- height: 600,
81
- loading: S ? "eager" : "lazy",
82
- decoding: "async",
83
- className: "h-full w-full object-cover object-center transition-transform duration-300 group-hover:scale-105"
84
- }
85
- ) : /* @__PURE__ */ r("div", { className: "flex h-full items-center justify-center text-muted-foreground", children: i("ecommerce.no_image") === "ecommerce.no_image" ? "No image" : i("ecommerce.no_image") })
86
- ]
87
- }
88
- ),
89
- /* @__PURE__ */ l("div", { className: "flex flex-1 flex-col p-4", children: [
90
- e.categories && e.categories.length > 0 && /* @__PURE__ */ r("div", { className: "text-[10px] font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400 mb-1", children: e.categories.map((a) => U(a.name, a.name_translations, F)).join(" • ") }),
91
- /* @__PURE__ */ r(y, { href: `/product/${e.slug}`, className: "mb-2", children: /* @__PURE__ */ r("h3", { className: "line-clamp-1 text-lg font-medium text-foreground group-hover:underline", children: e.title }) }),
92
- /* @__PURE__ */ r("div", { className: "flex items-center gap-1 mb-2 mt-0.5 text-xs text-muted-foreground min-h-[1.25rem] select-none", children: e.total_reviews && e.total_reviews > 0 ? /* @__PURE__ */ l(T, { children: [
93
- /* @__PURE__ */ r(
94
- "div",
95
- {
96
- role: "img",
97
- "aria-label": i("ecommerce.rating_out_of_5", { rating: Number(e.average_rating ?? 0).toFixed(1) }) === "ecommerce.rating_out_of_5" ? `Rated ${Number(e.average_rating ?? 0).toFixed(1)} out of 5` : i("ecommerce.rating_out_of_5", { rating: Number(e.average_rating ?? 0).toFixed(1) }),
98
- className: "flex items-center text-amber-500 mr-1",
99
- children: Array.from({ length: 5 }).map((a, b) => {
100
- const L = e.average_rating ?? 0;
101
- return /* @__PURE__ */ r(
102
- "svg",
103
- {
104
- className: _(
105
- "h-3.5 w-3.5 fill-current",
106
- b < Math.round(L) ? "text-amber-500" : "text-slate-200 dark:text-slate-800"
107
- ),
108
- viewBox: "0 0 20 20",
109
- fill: "currentColor",
110
- "aria-hidden": "true",
111
- children: /* @__PURE__ */ r("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" })
112
- },
113
- b
114
- );
115
- })
116
- }
117
- ),
118
- /* @__PURE__ */ r("span", { className: "font-semibold text-slate-700 dark:text-slate-300", children: Number(e.average_rating).toFixed(1) }),
119
- /* @__PURE__ */ l("span", { className: "ml-0.5", children: [
120
- "(",
121
- e.total_reviews,
122
- ")"
123
- ] })
124
- ] }) : /* @__PURE__ */ r("span", { className: "text-slate-400 dark:text-slate-600", children: i("reviews.no_reviews") }) }),
125
- /* @__PURE__ */ r("div", { className: "mb-4", children: e.product_type === "digital" && (h || f) ? /* @__PURE__ */ l("div", { className: "flex flex-wrap items-baseline gap-x-3 gap-y-1", children: [
126
- h && /* @__PURE__ */ l("div", { className: "flex items-baseline gap-0.5", children: [
127
- /* @__PURE__ */ r("span", { className: "text-xl font-bold text-primary", children: t(h.price, s) }),
128
- /* @__PURE__ */ l("span", { className: "text-xs font-medium text-muted-foreground lowercase", children: [
129
- "/ ",
130
- i("ecommerce.month")
131
- ] })
132
- ] }),
133
- f && /* @__PURE__ */ l("div", { className: "flex items-baseline gap-0.5", children: [
134
- /* @__PURE__ */ r("span", { className: _("font-bold text-primary", h ? "text-lg" : "text-xl"), children: t(f.price, s) }),
135
- /* @__PURE__ */ l("span", { className: "text-xs font-medium text-muted-foreground lowercase", children: [
136
- "/ ",
137
- i("ecommerce.year")
138
- ] })
139
- ] })
140
- ] }) : /* @__PURE__ */ l("div", { className: "flex items-baseline gap-2", children: [
141
- /* @__PURE__ */ r("span", { className: "text-xl font-bold text-primary", children: k }),
142
- !g && m.sale_price && /* @__PURE__ */ l("span", { className: "text-sm text-muted-foreground tabular-nums", children: [
143
- /* @__PURE__ */ l("span", { className: "sr-only", children: [
144
- i("ecommerce.regular_price") === "ecommerce.regular_price" ? "Regular price" : i("ecommerce.regular_price"),
145
- " "
146
- ] }),
147
- /* @__PURE__ */ r("s", { children: t(m.price, s) })
148
- ] })
149
- ] }) }),
150
- u && /* @__PURE__ */ l("div", { className: "mb-4 rounded-md border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs text-emerald-900", children: [
151
- /* @__PURE__ */ r("div", { className: "font-semibold", children: u.label }),
152
- /* @__PURE__ */ r("div", { className: "text-emerald-700", children: u.paymentRequirementLabel })
153
- ] }),
154
- /* @__PURE__ */ r("div", { className: "mt-auto", children: /* @__PURE__ */ r(
155
- M,
156
- {
157
- product: {
158
- ...e,
159
- price: e.price,
160
- prices: e.prices,
161
- sale_price: e.sale_price,
162
- sale_prices: e.sale_prices
163
- },
164
- className: "w-full"
165
- }
166
- ) })
167
- ] })
168
- ] });
169
- };
170
- export {
171
- X as ProductCard
1
+ "use client";
2
+ import { resolveEffectivePriceForCurrency as e, resolvePriceForCurrency as t, resolvePriceRangeForCurrency as n } from "../currency.es.js";
3
+ import { useCurrency as r } from "../CurrencyProvider.es.js";
4
+ import { usePriceFormatter as i } from "../use-price-formatter.es.js";
5
+ import { getTrialSummary as a } from "../trials.es.js";
6
+ import { resolveTranslatedText as o } from "../variation-utils.es.js";
7
+ import { AddToCartButton as s } from "./AddToCartButton.es.js";
8
+ import c from "next/link";
9
+ import { cn as l, majorUnitAmountToMinor as u, useTranslations as d } from "@nextblock-cms/utils";
10
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
11
+ //#region libs/ecommerce/src/lib/components/ProductCard.tsx
12
+ var h = ({ product: h, className: g, priority: _ = !1 }) => {
13
+ let v = i(), { activeCurrencyCode: y, currencies: b } = r(), x = n({
14
+ entries: h.variants?.length ? h.variants : h.product_variants?.length ? h.product_variants : [],
15
+ currencyCode: y,
16
+ currencies: b
17
+ }), S = !!(h.has_variants && x), C = e({
18
+ prices: h.prices,
19
+ salePrices: h.sale_prices,
20
+ fallbackPrice: h.price,
21
+ fallbackSalePrice: h.sale_price,
22
+ saleStartAt: h.sale_start_at,
23
+ saleEndAt: h.sale_end_at,
24
+ scheduledPrice: h.scheduled_price,
25
+ scheduledPrices: h.scheduled_prices,
26
+ scheduledPriceAt: h.scheduled_price_at,
27
+ currencyCode: y,
28
+ currencies: b
29
+ }), w = S && x ? x.min === x.max ? v(x.min, y) : `${v(x.min, y)} - ${v(x.max, y)}` : v(C.sale_price ?? C.price, y), T = h.variants?.length ? h.variants : h.product_variants?.length ? h.product_variants : [], E = S ? T.some((t) => e({
30
+ prices: t.prices,
31
+ salePrices: t.sale_prices,
32
+ fallbackPrice: t.price,
33
+ fallbackSalePrice: t.sale_price,
34
+ saleStartAt: t.sale_start_at,
35
+ saleEndAt: t.sale_end_at,
36
+ scheduledPrice: t.scheduled_price,
37
+ scheduledPrices: t.scheduled_prices,
38
+ scheduledPriceAt: t.scheduled_price_at,
39
+ currencyCode: y,
40
+ currencies: b
41
+ }).sale_price != null) : C.sale_price != null, { t: D, lang: O } = d(), k = D("ecommerce.on_sale"), A = k === "ecommerce.on_sale" ? "On Sale" : k, j = a(h, D), M = (h.freemius_plans?.[0])?.freemius_pricing?.[0], N = b.find((e) => e.is_default)?.code || "USD", P = M?.override_monthly_price ?? M?.api_monthly_price, F = M?.override_annual_price ?? M?.api_annual_price, I = typeof P == "number" ? t({
42
+ prices: { [N]: u(P, N) },
43
+ currencyCode: y,
44
+ currencies: b
45
+ }) : null, L = typeof F == "number" ? t({
46
+ prices: { [N]: u(F, N) },
47
+ currencyCode: y,
48
+ currencies: b
49
+ }) : null;
50
+ return /* @__PURE__ */ m("div", {
51
+ className: l("group relative flex flex-col overflow-hidden rounded-lg border bg-card text-card-foreground shadow-sm transition-shadow hover:shadow-md", g),
52
+ children: [/* @__PURE__ */ m(c, {
53
+ href: `/product/${h.slug}`,
54
+ tabIndex: -1,
55
+ "aria-hidden": "true",
56
+ className: "relative aspect-square overflow-hidden bg-muted",
57
+ children: [E && /* @__PURE__ */ p("span", {
58
+ className: "absolute left-3 top-3 z-10 rounded-full bg-destructive px-2.5 py-1 text-[10px] font-bold uppercase tracking-wider text-destructive-foreground shadow-sm",
59
+ children: A
60
+ }), h.image_url ? /* @__PURE__ */ p("img", {
61
+ src: h.image_url,
62
+ alt: "",
63
+ width: 600,
64
+ height: 600,
65
+ loading: _ ? "eager" : "lazy",
66
+ decoding: "async",
67
+ className: "h-full w-full object-cover object-center transition-transform duration-300 group-hover:scale-105"
68
+ }) : /* @__PURE__ */ p("div", {
69
+ className: "flex h-full items-center justify-center text-muted-foreground",
70
+ children: D("ecommerce.no_image") === "ecommerce.no_image" ? "No image" : D("ecommerce.no_image")
71
+ })]
72
+ }), /* @__PURE__ */ m("div", {
73
+ className: "flex flex-1 flex-col p-4",
74
+ children: [
75
+ h.categories && h.categories.length > 0 && /* @__PURE__ */ p("div", {
76
+ className: "text-[10px] font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400 mb-1",
77
+ children: h.categories.map((e) => o(e.name, e.name_translations, O)).join(" • ")
78
+ }),
79
+ /* @__PURE__ */ p(c, {
80
+ href: `/product/${h.slug}`,
81
+ className: "mb-2",
82
+ children: /* @__PURE__ */ p("h3", {
83
+ className: "line-clamp-1 text-lg font-medium text-foreground group-hover:underline",
84
+ children: h.title
85
+ })
86
+ }),
87
+ /* @__PURE__ */ p("div", {
88
+ className: "flex items-center gap-1 mb-2 mt-0.5 text-xs text-muted-foreground min-h-[1.25rem] select-none",
89
+ children: h.total_reviews && h.total_reviews > 0 ? /* @__PURE__ */ m(f, { children: [
90
+ /* @__PURE__ */ p("div", {
91
+ role: "img",
92
+ "aria-label": D("ecommerce.rating_out_of_5", { rating: Number(h.average_rating ?? 0).toFixed(1) }) === "ecommerce.rating_out_of_5" ? `Rated ${Number(h.average_rating ?? 0).toFixed(1)} out of 5` : D("ecommerce.rating_out_of_5", { rating: Number(h.average_rating ?? 0).toFixed(1) }),
93
+ className: "flex items-center text-amber-500 mr-1",
94
+ children: Array.from({ length: 5 }).map((e, t) => {
95
+ let n = h.average_rating ?? 0;
96
+ return /* @__PURE__ */ p("svg", {
97
+ className: l("h-3.5 w-3.5 fill-current", t < Math.round(n) ? "text-amber-500" : "text-slate-200 dark:text-slate-800"),
98
+ viewBox: "0 0 20 20",
99
+ fill: "currentColor",
100
+ "aria-hidden": "true",
101
+ children: /* @__PURE__ */ p("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" })
102
+ }, t);
103
+ })
104
+ }),
105
+ /* @__PURE__ */ p("span", {
106
+ className: "font-semibold text-slate-700 dark:text-slate-300",
107
+ children: Number(h.average_rating).toFixed(1)
108
+ }),
109
+ /* @__PURE__ */ m("span", {
110
+ className: "ml-0.5",
111
+ children: [
112
+ "(",
113
+ h.total_reviews,
114
+ ")"
115
+ ]
116
+ })
117
+ ] }) : /* @__PURE__ */ p("span", {
118
+ className: "text-slate-400 dark:text-slate-600",
119
+ children: D("reviews.no_reviews")
120
+ })
121
+ }),
122
+ /* @__PURE__ */ p("div", {
123
+ className: "mb-4",
124
+ children: h.product_type === "digital" && (I || L) ? /* @__PURE__ */ m("div", {
125
+ className: "flex flex-wrap items-baseline gap-x-3 gap-y-1",
126
+ children: [I && /* @__PURE__ */ m("div", {
127
+ className: "flex items-baseline gap-0.5",
128
+ children: [/* @__PURE__ */ p("span", {
129
+ className: "text-xl font-bold text-primary",
130
+ children: v(I.price, y)
131
+ }), /* @__PURE__ */ m("span", {
132
+ className: "text-xs font-medium text-muted-foreground lowercase",
133
+ children: ["/ ", D("ecommerce.month")]
134
+ })]
135
+ }), L && /* @__PURE__ */ m("div", {
136
+ className: "flex items-baseline gap-0.5",
137
+ children: [/* @__PURE__ */ p("span", {
138
+ className: l("font-bold text-primary", I ? "text-lg" : "text-xl"),
139
+ children: v(L.price, y)
140
+ }), /* @__PURE__ */ m("span", {
141
+ className: "text-xs font-medium text-muted-foreground lowercase",
142
+ children: ["/ ", D("ecommerce.year")]
143
+ })]
144
+ })]
145
+ }) : /* @__PURE__ */ m("div", {
146
+ className: "flex items-baseline gap-2",
147
+ children: [/* @__PURE__ */ p("span", {
148
+ className: "text-xl font-bold text-primary",
149
+ children: w
150
+ }), !S && C.sale_price && /* @__PURE__ */ m("span", {
151
+ className: "text-sm text-muted-foreground tabular-nums",
152
+ children: [/* @__PURE__ */ m("span", {
153
+ className: "sr-only",
154
+ children: [D("ecommerce.regular_price") === "ecommerce.regular_price" ? "Regular price" : D("ecommerce.regular_price"), " "]
155
+ }), /* @__PURE__ */ p("s", { children: v(C.price, y) })]
156
+ })]
157
+ })
158
+ }),
159
+ j && /* @__PURE__ */ m("div", {
160
+ className: "mb-4 rounded-md border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs text-emerald-900",
161
+ children: [/* @__PURE__ */ p("div", {
162
+ className: "font-semibold",
163
+ children: j.label
164
+ }), /* @__PURE__ */ p("div", {
165
+ className: "text-emerald-700",
166
+ children: j.paymentRequirementLabel
167
+ })]
168
+ }),
169
+ /* @__PURE__ */ p("div", {
170
+ className: "mt-auto",
171
+ children: /* @__PURE__ */ p(s, {
172
+ product: {
173
+ ...h,
174
+ price: h.price,
175
+ prices: h.prices,
176
+ sale_price: h.sale_price,
177
+ sale_prices: h.sale_prices
178
+ },
179
+ className: "w-full"
180
+ })
181
+ })
182
+ ]
183
+ })]
184
+ });
172
185
  };
186
+ //#endregion
187
+ export { h as ProductCard };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),I=require("lucide-react"),A=require("@nextblock-cms/ui/badge"),ee=require("@nextblock-cms/ui/button"),te=require("@nextblock-cms/ui/label"),se=require("@nextblock-cms/ui/separator"),F=require("@nextblock-cms/utils"),re=require("../use-price-formatter.cjs.js"),ae=require("../product-context.cjs.js"),ie=require("./ProductGallery.cjs.js"),ce=require("./AddToCartButton.cjs.js"),ne=require("./SubscriptionSelector.cjs.js"),le=require("./SimpleTiptapRenderer.cjs.js"),oe=require("./ShortDescription.cjs.js"),v=require("../variation-utils.cjs.js"),de=require("../CurrencyProvider.cjs.js"),$=require("../currency.cjs.js"),ue=require("../types.cjs.js"),me=require("../trials.cjs.js");function V(o,_,P,E){const C={kind:"product-field",field:_,input:P,label:E},t=typeof window<"u"?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:"")||"http://localhost:3000";let g=(typeof window<"u"?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:"")||"http://localhost:3000").replace(/\/+$/,"");try{(g.startsWith("http://")||g.startsWith("https://"))&&(g=new URL(g).hostname)}catch{}const N=process.env.NEXTBLOCK_VERCEL_PROJECT_ID||process.env.VERCEL_PROJECT_ID,d=process.env.NEXTBLOCK_VERCEL_WORKSPACE_ID||process.env.VERCEL_ORG_ID,b={origin:g,editUrl:`${t}/cms/products/${o.id}/edit`,data:{parentType:"product",parentId:o.id,slug:o.slug,languageId:o.language_id,draftId:null,target:C}};return N&&(b.projectId=N),d&&(b.workspaceId=d),{"data-vercel-edit-info":JSON.stringify(b),"data-vercel-edit-target":JSON.stringify(C),"data-nextblock-visual-edit":`product:${_}`}}const pe=({visualEditingEnabled:o=!1,descriptionNode:_,reviewsNode:P,canPurchase:E=!0,purchaseFallbackNode:C})=>{const t=ae.useProduct(),{t:c,lang:g}=F.useTranslations(),N=re.usePriceFormatter(),{activeCurrencyCode:d,currencies:b}=de.useCurrency(),J=o?V(t,"title","plain-text","Product title"):void 0,G=o?V(t,"short_description","plain-text","Short description"):void 0,K=o?V(t,"description_json","tiptap","Product description"):void 0,l=(r,n,m)=>{const p=c(r,m);return p===r?n:p},L=t.images&&t.images.length>0?t.images:t.image_url?[{url:t.image_url,alt:t.title}]:[],j=t.custom_props?.provider==="freemius"||ue.isDigitalProduct(t),O=me.getTrialSummary(t,c),i=!j&&!!(t.has_variants&&t.attributes?.length&&t.variants?.length),f=t.attributes||[],u=t.variants||[],[w,R]=x.useState(()=>v.chooseInitialVariantSelections(f,u)),[U,T]=x.useState(1);x.useEffect(()=>{T(1)},[t.id]),x.useEffect(()=>{i&&R(v.chooseInitialVariantSelections(f,u))},[f,i,t.id,u]);const y=x.useMemo(()=>i?v.normalizeSelectionsToAvailableVariants(f,u,w):w,[f,i,w,u]);x.useEffect(()=>{JSON.stringify(y)!==JSON.stringify(w)&&R(y)},[y,w]);const s=x.useMemo(()=>i?v.findMatchingVariant(u,y):null,[i,y,u]),B=$.resolveEffectivePriceForCurrency({prices:t.prices,salePrices:t.sale_prices,fallbackPrice:t.price,fallbackSalePrice:t.sale_price,saleStartAt:t.sale_start_at,saleEndAt:t.sale_end_at,scheduledPrice:t.scheduled_price,scheduledPrices:t.scheduled_prices,scheduledPriceAt:t.scheduled_price_at,currencyCode:d,currencies:b}),D=i&&s?$.resolveEffectivePriceForCurrency({prices:s.prices,salePrices:s.sale_prices,fallbackPrice:s.price,fallbackSalePrice:s.sale_price,saleStartAt:s.sale_start_at,saleEndAt:s.sale_end_at,scheduledPrice:s.scheduled_price,scheduledPrices:s.scheduled_prices,scheduledPriceAt:s.scheduled_price_at,currencyCode:d,currencies:b}):null,k=D?.price??B.price,S=D?.sale_price??B.sale_price,a=i?s?.stock_quantity??0:t.stock??null,q=a===null||a>0,h=a===null?U:Math.max(1,Math.min(U,Math.max(a,1))),X=x.useMemo(()=>{if(!s?.image_url)return L;const r={url:s.image_url,alt:`${t.title} ${s.label}`},n=L.filter(m=>m.url!==s.image_url);return[r,...n]},[L,t.title,s]),z=typeof S=="number"&&k>0?Math.round((k-S)/k*100):0,Q=i&&s?{...t,sku:s.sku,price:s.price,prices:s.prices,sale_price:typeof s.sale_price=="number"?s.sale_price:null,sale_prices:s.sale_prices,sale_start_at:s.sale_start_at,sale_end_at:s.sale_end_at,scheduled_price:s.scheduled_price,scheduled_prices:s.scheduled_prices,scheduled_price_at:s.scheduled_price_at,image_url:s.image_url||t.image_url,stock:s.stock_quantity,variant_id:s.id,variant_label:s.label,selected_options:s.selected_options,currency_code:d}:{...t,currency_code:d},W=(r,n)=>{R(m=>v.applyVariantSelection(f,u,m,r,n))},H=a===null?l("ecommerce.in_stock_untracked","In stock"):l("ecommerce.in_stock",`${a} in stock`,{count:String(a)}),M=l("ecommerce.out_of_stock","Out of stock"),Y=l("ecommerce.select_options","Select Options"),Z=l("ecommerce.variant_selection_required","Select one term from every dropdown to resolve a variation.");return e.jsxs("div",{className:"w-full animate-in fade-in slide-in-from-bottom-4 duration-700 ease-out",children:[e.jsx("div",{className:"container mx-auto px-4 md:px-6 py-12",children:e.jsxs("div",{className:"grid gap-12 lg:grid-cols-[2fr_3fr] items-start",children:[e.jsx("div",{className:"w-full max-w-2xl mx-auto lg:max-w-none",children:e.jsx(ie.ProductGallery,{images:X,className:"w-full"})}),e.jsxs("div",{className:"flex flex-col gap-4 pb-2 max-w-xl mx-auto lg:mx-0 lg:max-w-none",children:[e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("h1",{className:"text-3xl sm:text-4xl lg:text-5xl font-extrabold tracking-tight text-foreground leading-[1.1] lg:mt-0",...J,children:t.title}),e.jsx("div",{className:"flex items-center gap-2 mt-2",children:e.jsxs("a",{href:"#reviews-section",className:"flex items-center gap-1.5 group hover:opacity-85 transition-opacity",children:[e.jsx("div",{className:"flex items-center text-amber-500",children:Array.from({length:5}).map((r,n)=>e.jsx("svg",{className:F.cn("h-4 w-4 fill-current",n<Math.round(t.average_rating||0)?"text-amber-500":"text-slate-300 dark:text-slate-700"),viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{d:"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"})},n))}),t.total_reviews&&t.total_reviews>0?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-300",children:t.average_rating?.toFixed(1)}),e.jsxs("span",{className:"text-sm text-muted-foreground underline decoration-dotted group-hover:text-primary",children:["(",t.total_reviews===1?c("reviews.review_count_one",{count:t.total_reviews}):c("reviews.review_count_other",{count:t.total_reviews}),")"]})]}):e.jsx("span",{className:"text-xs text-muted-foreground group-hover:text-primary underline decoration-dotted",children:c("reviews.be_the_first")})]})}),t.categories&&t.categories.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-1.5 text-xs font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400",children:t.categories.map((r,n)=>{const m=v.resolveTranslatedText(r.name,r.name_translations,g);return e.jsxs(x.Fragment,{children:[n>0&&e.jsx("span",{className:"text-muted-foreground/30",children:"•"}),e.jsx("span",{children:m})]},r.id)})}),e.jsx("div",{className:"prose prose-neutral dark:prose-invert max-w-none text-muted-foreground leading-relaxed text-left",...G,children:t.short_description?e.jsx(oe.ShortDescription,{value:t.short_description,className:"text-lg mb-4 leading-relaxed"}):o?e.jsx("p",{className:"text-lg mb-4 italic text-muted-foreground",children:"Add a short product description."}):null}),e.jsxs("div",{className:"flex items-center gap-3",children:[typeof S=="number"&&e.jsx(A.Badge,{variant:"destructive",className:"px-2.5 py-1 text-xs font-bold uppercase tracking-wide animate-pulse shadow-sm",children:c("ecommerce.sale_badge",{percent:String(z)})}),!j&&a!==null&&a>0&&a<10&&e.jsx(A.Badge,{variant:"outline",className:"text-amber-600 border-amber-200 bg-amber-50",children:c("ecommerce.low_stock",{count:String(a)})}),O&&e.jsx(A.Badge,{variant:"secondary",className:"border border-emerald-200 bg-emerald-50 text-emerald-800",children:O.label})]})]})}),e.jsxs("div",{className:"p-5 rounded-2xl bg-card border border-border/80 shadow-md space-y-4",children:[E?j?e.jsx(ne.SubscriptionSelector,{product:t}):e.jsxs("div",{className:"space-y-3.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-[10px] font-bold text-muted-foreground uppercase tracking-widest",children:l("ecommerce.price","Price")}),e.jsxs("div",{className:"flex items-baseline gap-2.5",children:[e.jsx("span",{className:"text-3xl font-extrabold text-foreground",children:N(S??k,d)}),typeof S=="number"&&e.jsx("span",{className:"text-lg text-muted-foreground line-through decoration-destructive/20 decoration-1",children:N(k,d)})]})]}),!j&&(s||!i)&&e.jsxs("div",{className:"text-right space-y-1",children:[e.jsxs("span",{className:"text-[10px] font-bold text-muted-foreground uppercase tracking-widest block",children:[!i&&t.sku&&e.jsxs("span",{className:"mr-2 font-normal lowercase normal-case text-muted-foreground/70",children:[l("ecommerce.sku","SKU"),": ",t.sku]}),l("ecommerce.status","Status")]}),e.jsx("div",{className:q?"text-emerald-600 dark:text-emerald-400 font-semibold text-sm":"text-destructive font-semibold text-sm",children:q?H:M})]})]}),i&&e.jsx("div",{className:"space-y-3",children:e.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:f.map((r,n)=>{const m=v.getAvailableTermIdsForAttribute(u,r.id,{});return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(te.Label,{htmlFor:`attribute-${r.id}`,className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:r.name}),n===0&&s?.sku&&e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono",children:s.sku})]}),e.jsx("select",{id:`attribute-${r.id}`,className:"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",value:y[r.id]||"",onChange:p=>W(r.id,p.target.value),children:r.terms.map(p=>e.jsx("option",{value:p.id,disabled:!m.has(p.id),children:p.value},p.id))})]},r.id)})})}),i&&!s&&e.jsx("p",{className:"text-xs text-muted-foreground italic pt-1",children:Z}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[!j&&q&&e.jsxs("div",{role:"group","aria-label":l("ecommerce.quantity","Quantity"),className:"flex items-center border rounded-lg h-12 bg-background border-input select-none",children:[e.jsx("button",{type:"button",onClick:()=>T(Math.max(1,h-1)),"aria-label":l("ecommerce.decrease_quantity","Decrease quantity"),className:"px-3 h-full flex items-center justify-center rounded-l-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",disabled:h<=1,children:e.jsx("span",{"aria-hidden":"true",children:"-"})}),e.jsx("span",{"aria-live":"polite","aria-atomic":"true",className:"w-8 text-center text-sm font-semibold tabular-nums",children:h}),e.jsx("button",{type:"button",onClick:()=>T(a!==null&&h>=a?h:h+1),"aria-label":l("ecommerce.increase_quantity","Increase quantity"),className:"px-3 h-full flex items-center justify-center rounded-r-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",disabled:a!==null&&h>=a,children:e.jsx("span",{"aria-hidden":"true",children:"+"})})]}),i&&(!s||!q)?e.jsx(ee.Button,{disabled:!0,className:"flex-1 h-12 text-md font-bold shadow-md",children:s?M:Y}):e.jsx(ce.AddToCartButton,{product:Q,quantity:h,className:"flex-1 h-12 text-base font-bold shadow-md transition-shadow hover:shadow-lg active:scale-[0.98]"})]})]}):C,e.jsx(se.Separator,{className:"opacity-60 my-0.5"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-center text-[11px] font-medium text-muted-foreground pt-1",children:[e.jsx("div",{className:"flex items-center justify-center gap-2",children:j?e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.Download,{className:"h-3.5 w-3.5"}),c("ecommerce.instant_digital_delivery")]}):e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.Package,{className:"h-3.5 w-3.5"}),c("ecommerce.free_shipping")]})}),e.jsx("div",{className:"flex items-center justify-center gap-2",children:e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(I.ShieldCheck,{className:"h-3.5 w-3.5"}),c("ecommerce.secure_checkout")]})})]})]})]})]})}),e.jsx("div",{className:"min-w-0 w-full",..._?void 0:K,children:_||(t.description_json?e.jsx("div",{className:"container mx-auto px-4 md:px-6 pb-12 prose prose-neutral dark:prose-invert max-w-none leading-relaxed",children:e.jsx(le.SimpleTiptapRenderer,{content:t.description_json})}):e.jsx("div",{className:"container mx-auto px-4 md:px-6 pb-12",children:e.jsx("p",{className:"italic text-sm text-muted-foreground",children:c("ecommerce.no_description")})}))}),P&&e.jsx("div",{id:"reviews-section",className:"border-t border-border mt-12 pt-12",children:P})]})};exports.ProductDetailsLayout=pe;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../types.cjs.js"),n=require("../currency.cjs.js"),r=require("../CurrencyProvider.cjs.js"),i=require("../use-price-formatter.cjs.js"),a=require("../trials.cjs.js"),o=require("../variation-utils.cjs.js"),s=require("./AddToCartButton.cjs.js"),c=require("./ProductGallery.cjs.js"),l=require("./SimpleTiptapRenderer.cjs.js"),u=require("./ShortDescription.cjs.js"),d=require("./SubscriptionSelector.cjs.js"),f=require("../product-context.cjs.js");let p=require("@nextblock-cms/ui/badge"),m=require("@nextblock-cms/ui/button"),h=require("react");h=e.__toESM(h,1);let g=require("lucide-react"),_=require("@nextblock-cms/utils"),v=require("react/jsx-runtime"),y=require("@nextblock-cms/ui/label"),b=require("@nextblock-cms/ui/separator");function x(e,t,n,r){let i={kind:`product-field`,field:t,input:n,label:r},a=typeof window<`u`?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:``)||`http://localhost:3000`,o=(typeof window<`u`?window.location.origin:process.env.NEXT_PUBLIC_URL||process.env.TARGET_URL||(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:``)||`http://localhost:3000`).replace(/\/+$/,``);try{(o.startsWith(`http://`)||o.startsWith(`https://`))&&(o=new URL(o).hostname)}catch{}let s=process.env.NEXTBLOCK_VERCEL_PROJECT_ID||process.env.VERCEL_PROJECT_ID,c=process.env.NEXTBLOCK_VERCEL_WORKSPACE_ID||process.env.VERCEL_ORG_ID,l={origin:o,editUrl:`${a}/cms/products/${e.id}/edit`,data:{parentType:`product`,parentId:e.id,slug:e.slug,languageId:e.language_id,draftId:null,target:i}};return s&&(l.projectId=s),c&&(l.workspaceId=c),{"data-vercel-edit-info":JSON.stringify(l),"data-vercel-edit-target":JSON.stringify(i),"data-nextblock-visual-edit":`product:${t}`}}var S=({visualEditingEnabled:e=!1,descriptionNode:S,reviewsNode:C,canPurchase:w=!0,purchaseFallbackNode:T})=>{let E=f.useProduct(),{t:D,lang:O}=(0,_.useTranslations)(),k=i.usePriceFormatter(),{activeCurrencyCode:A,currencies:j}=r.useCurrency(),M=e?x(E,`title`,`plain-text`,`Product title`):void 0,ee=e?x(E,`short_description`,`plain-text`,`Short description`):void 0,te=e?x(E,`description_json`,`tiptap`,`Product description`):void 0,N=(e,t,n)=>{let r=D(e,n);return r===e?t:r},P=E.images&&E.images.length>0?E.images:E.image_url?[{url:E.image_url,alt:E.title}]:[],F=E.custom_props?.provider===`freemius`||t.isDigitalProduct(E),I=a.getTrialSummary(E,D),L=!F&&!!(E.has_variants&&E.attributes?.length&&E.variants?.length),R=E.attributes||[],z=E.variants||[],[B,V]=(0,h.useState)(()=>o.chooseInitialVariantSelections(R,z)),[H,U]=(0,h.useState)(1);(0,h.useEffect)(()=>{U(1)},[E.id]),(0,h.useEffect)(()=>{L&&V(o.chooseInitialVariantSelections(R,z))},[R,L,E.id,z]);let W=(0,h.useMemo)(()=>L?o.normalizeSelectionsToAvailableVariants(R,z,B):B,[R,L,B,z]);(0,h.useEffect)(()=>{JSON.stringify(W)!==JSON.stringify(B)&&V(W)},[W,B]);let G=(0,h.useMemo)(()=>L?o.findMatchingVariant(z,W):null,[L,W,z]),K=n.resolveEffectivePriceForCurrency({prices:E.prices,salePrices:E.sale_prices,fallbackPrice:E.price,fallbackSalePrice:E.sale_price,saleStartAt:E.sale_start_at,saleEndAt:E.sale_end_at,scheduledPrice:E.scheduled_price,scheduledPrices:E.scheduled_prices,scheduledPriceAt:E.scheduled_price_at,currencyCode:A,currencies:j}),q=L&&G?n.resolveEffectivePriceForCurrency({prices:G.prices,salePrices:G.sale_prices,fallbackPrice:G.price,fallbackSalePrice:G.sale_price,saleStartAt:G.sale_start_at,saleEndAt:G.sale_end_at,scheduledPrice:G.scheduled_price,scheduledPrices:G.scheduled_prices,scheduledPriceAt:G.scheduled_price_at,currencyCode:A,currencies:j}):null,J=q?.price??K.price,Y=q?.sale_price??K.sale_price,X=L?G?.stock_quantity??0:E.stock??null,Z=X===null||X>0,Q=X===null?H:Math.max(1,Math.min(H,Math.max(X,1))),ne=(0,h.useMemo)(()=>G?.image_url?[{url:G.image_url,alt:`${E.title} ${G.label}`},...P.filter(e=>e.url!==G.image_url)]:P,[P,E.title,G]),re=typeof Y==`number`&&J>0?Math.round((J-Y)/J*100):0,ie=L&&G?{...E,sku:G.sku,price:G.price,prices:G.prices,sale_price:typeof G.sale_price==`number`?G.sale_price:null,sale_prices:G.sale_prices,sale_start_at:G.sale_start_at,sale_end_at:G.sale_end_at,scheduled_price:G.scheduled_price,scheduled_prices:G.scheduled_prices,scheduled_price_at:G.scheduled_price_at,image_url:G.image_url||E.image_url,stock:G.stock_quantity,variant_id:G.id,variant_label:G.label,selected_options:G.selected_options,currency_code:A}:{...E,currency_code:A},ae=(e,t)=>{V(n=>o.applyVariantSelection(R,z,n,e,t))},oe=X===null?N(`ecommerce.in_stock_untracked`,`In stock`):N(`ecommerce.in_stock`,`${X} in stock`,{count:String(X)}),$=N(`ecommerce.out_of_stock`,`Out of stock`),se=N(`ecommerce.select_options`,`Select Options`),ce=N(`ecommerce.variant_selection_required`,`Select one term from every dropdown to resolve a variation.`);return(0,v.jsxs)(`div`,{className:`w-full animate-in fade-in slide-in-from-bottom-4 duration-700 ease-out`,children:[(0,v.jsx)(`div`,{className:`container mx-auto px-4 md:px-6 py-12`,children:(0,v.jsxs)(`div`,{className:`grid gap-12 lg:grid-cols-[2fr_3fr] items-start`,children:[(0,v.jsx)(`div`,{className:`w-full max-w-2xl mx-auto lg:max-w-none`,children:(0,v.jsx)(c.ProductGallery,{images:ne,className:`w-full`})}),(0,v.jsxs)(`div`,{className:`flex flex-col gap-4 pb-2 max-w-xl mx-auto lg:mx-0 lg:max-w-none`,children:[(0,v.jsx)(`div`,{className:`space-y-6`,children:(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsx)(`h1`,{className:`text-3xl sm:text-4xl lg:text-5xl font-extrabold tracking-tight text-foreground leading-[1.1] lg:mt-0`,...M,children:E.title}),(0,v.jsx)(`div`,{className:`flex items-center gap-2 mt-2`,children:(0,v.jsxs)(`a`,{href:`#reviews-section`,className:`flex items-center gap-1.5 group hover:opacity-85 transition-opacity`,children:[(0,v.jsx)(`div`,{className:`flex items-center text-amber-500`,children:Array.from({length:5}).map((e,t)=>(0,v.jsx)(`svg`,{className:(0,_.cn)(`h-4 w-4 fill-current`,t<Math.round(E.average_rating||0)?`text-amber-500`:`text-slate-300 dark:text-slate-700`),viewBox:`0 0 20 20`,fill:`currentColor`,children:(0,v.jsx)(`path`,{d:`M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z`})},t))}),E.total_reviews&&E.total_reviews>0?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`span`,{className:`text-sm font-semibold text-slate-700 dark:text-slate-300`,children:E.average_rating?.toFixed(1)}),(0,v.jsxs)(`span`,{className:`text-sm text-muted-foreground underline decoration-dotted group-hover:text-primary`,children:[`(`,E.total_reviews===1?D(`reviews.review_count_one`,{count:E.total_reviews}):D(`reviews.review_count_other`,{count:E.total_reviews}),`)`]})]}):(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground group-hover:text-primary underline decoration-dotted`,children:D(`reviews.be_the_first`)})]})}),E.categories&&E.categories.length>0&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5 text-xs font-bold uppercase tracking-widest text-amber-600 dark:text-amber-400`,children:E.categories.map((e,t)=>{let n=o.resolveTranslatedText(e.name,e.name_translations,O);return(0,v.jsxs)(h.default.Fragment,{children:[t>0&&(0,v.jsx)(`span`,{className:`text-muted-foreground/30`,children:`•`}),(0,v.jsx)(`span`,{children:n})]},e.id)})}),(0,v.jsx)(`div`,{className:`prose prose-neutral dark:prose-invert max-w-none text-muted-foreground leading-relaxed text-left`,...ee,children:E.short_description?(0,v.jsx)(u.ShortDescription,{value:E.short_description,className:`text-lg mb-4 leading-relaxed`}):e?(0,v.jsx)(`p`,{className:`text-lg mb-4 italic text-muted-foreground`,children:`Add a short product description.`}):null}),(0,v.jsxs)(`div`,{className:`flex items-center gap-3`,children:[typeof Y==`number`&&(0,v.jsx)(p.Badge,{variant:`destructive`,className:`px-2.5 py-1 text-xs font-bold uppercase tracking-wide animate-pulse shadow-sm`,children:D(`ecommerce.sale_badge`,{percent:String(re)})}),!F&&X!==null&&X>0&&X<10&&(0,v.jsx)(p.Badge,{variant:`outline`,className:`text-amber-600 border-amber-200 bg-amber-50`,children:D(`ecommerce.low_stock`,{count:String(X)})}),I&&(0,v.jsx)(p.Badge,{variant:`secondary`,className:`border border-emerald-200 bg-emerald-50 text-emerald-800`,children:I.label})]})]})}),(0,v.jsxs)(`div`,{className:`p-5 rounded-2xl bg-card border border-border/80 shadow-md space-y-4`,children:[w?F?(0,v.jsx)(d.SubscriptionSelector,{product:E}):(0,v.jsxs)(`div`,{className:`space-y-3.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,v.jsxs)(`div`,{className:`space-y-1`,children:[(0,v.jsx)(`span`,{className:`text-[10px] font-bold text-muted-foreground uppercase tracking-widest`,children:N(`ecommerce.price`,`Price`)}),(0,v.jsxs)(`div`,{className:`flex items-baseline gap-2.5`,children:[(0,v.jsx)(`span`,{className:`text-3xl font-extrabold text-foreground`,children:k(Y??J,A)}),typeof Y==`number`&&(0,v.jsx)(`span`,{className:`text-lg text-muted-foreground line-through decoration-destructive/20 decoration-1`,children:k(J,A)})]})]}),!F&&(G||!L)&&(0,v.jsxs)(`div`,{className:`text-right space-y-1`,children:[(0,v.jsxs)(`span`,{className:`text-[10px] font-bold text-muted-foreground uppercase tracking-widest block`,children:[!L&&E.sku&&(0,v.jsxs)(`span`,{className:`mr-2 font-normal lowercase normal-case text-muted-foreground/70`,children:[N(`ecommerce.sku`,`SKU`),`: `,E.sku]}),N(`ecommerce.status`,`Status`)]}),(0,v.jsx)(`div`,{className:Z?`text-emerald-600 dark:text-emerald-400 font-semibold text-sm`:`text-destructive font-semibold text-sm`,children:Z?oe:$})]})]}),L&&(0,v.jsx)(`div`,{className:`space-y-3`,children:(0,v.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:R.map((e,t)=>{let n=o.getAvailableTermIdsForAttribute(z,e.id,{});return(0,v.jsxs)(`div`,{className:`space-y-1`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,v.jsx)(y.Label,{htmlFor:`attribute-${e.id}`,className:`text-[11px] font-semibold text-muted-foreground uppercase tracking-wider`,children:e.name}),t===0&&G?.sku&&(0,v.jsx)(`span`,{className:`text-[10px] text-muted-foreground font-mono`,children:G.sku})]}),(0,v.jsx)(`select`,{id:`attribute-${e.id}`,className:`flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring`,value:W[e.id]||``,onChange:t=>ae(e.id,t.target.value),children:e.terms.map(e=>(0,v.jsx)(`option`,{value:e.id,disabled:!n.has(e.id),children:e.value},e.id))})]},e.id)})})}),L&&!G&&(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground italic pt-1`,children:ce}),(0,v.jsxs)(`div`,{className:`flex items-center gap-3 pt-1`,children:[!F&&Z&&(0,v.jsxs)(`div`,{role:`group`,"aria-label":N(`ecommerce.quantity`,`Quantity`),className:`flex items-center border rounded-lg h-12 bg-background border-input select-none`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>U(Math.max(1,Q-1)),"aria-label":N(`ecommerce.decrease_quantity`,`Decrease quantity`),className:`px-3 h-full flex items-center justify-center rounded-l-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring`,disabled:Q<=1,children:(0,v.jsx)(`span`,{"aria-hidden":`true`,children:`-`})}),(0,v.jsx)(`span`,{"aria-live":`polite`,"aria-atomic":`true`,className:`w-8 text-center text-sm font-semibold tabular-nums`,children:Q}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>U(X!==null&&Q>=X?Q:Q+1),"aria-label":N(`ecommerce.increase_quantity`,`Increase quantity`),className:`px-3 h-full flex items-center justify-center rounded-r-lg text-muted-foreground hover:text-foreground active:scale-95 transition-colors text-lg font-medium focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring`,disabled:X!==null&&Q>=X,children:(0,v.jsx)(`span`,{"aria-hidden":`true`,children:`+`})})]}),L&&(!G||!Z)?(0,v.jsx)(m.Button,{disabled:!0,className:`flex-1 h-12 text-md font-bold shadow-md`,children:G?$:se}):(0,v.jsx)(s.AddToCartButton,{product:ie,quantity:Q,className:`flex-1 h-12 text-base font-bold shadow-md transition-shadow hover:shadow-lg active:scale-[0.98]`})]})]}):T,(0,v.jsx)(b.Separator,{className:`opacity-60 my-0.5`}),(0,v.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 text-center text-[11px] font-medium text-muted-foreground pt-1`,children:[(0,v.jsx)(`div`,{className:`flex items-center justify-center gap-2`,children:F?(0,v.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,v.jsx)(g.Download,{className:`h-3.5 w-3.5`}),D(`ecommerce.instant_digital_delivery`)]}):(0,v.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,v.jsx)(g.Package,{className:`h-3.5 w-3.5`}),D(`ecommerce.free_shipping`)]})}),(0,v.jsx)(`div`,{className:`flex items-center justify-center gap-2`,children:(0,v.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,v.jsx)(g.ShieldCheck,{className:`h-3.5 w-3.5`}),D(`ecommerce.secure_checkout`)]})})]})]})]})]})}),(0,v.jsx)(`div`,{className:`min-w-0 w-full`,...S?void 0:te,children:S||(E.description_json?(0,v.jsx)(`div`,{className:`container mx-auto px-4 md:px-6 pb-12 prose prose-neutral dark:prose-invert max-w-none leading-relaxed`,children:(0,v.jsx)(l.SimpleTiptapRenderer,{content:E.description_json})}):(0,v.jsx)(`div`,{className:`container mx-auto px-4 md:px-6 pb-12`,children:(0,v.jsx)(`p`,{className:`italic text-sm text-muted-foreground`,children:D(`ecommerce.no_description`)})}))}),C&&(0,v.jsx)(`div`,{id:`reviews-section`,className:`border-t border-border mt-12 pt-12`,children:C})]})};exports.ProductDetailsLayout=S;