@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 +1 @@
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
+ "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js");let t=require("react");t=e.__toESM(t,1);let n=require("lucide-react"),r=require("react/jsx-runtime"),i=require("next/image");i=e.__toESM(i,1);var a=process.env.NEXT_PUBLIC_R2_BASE_URL||``,o=e=>e?e.startsWith(`http`)||!a?e:`${a.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`:``,s=({initialMedia:e,onUpdate:a,mediaPickerNode:s})=>{let[c,l]=(0,t.useState)(e),u=(0,t.useRef)(null),d=(0,t.useRef)(null);(0,t.useEffect)(()=>{l(e)},[e]);let f=(e,t)=>{u.current=t,e.dataTransfer.effectAllowed=`move`},p=(e,t)=>{d.current=t,e.preventDefault()},m=e=>{e.preventDefault()},h=e=>{if(e.preventDefault(),u.current===null||d.current===null)return;let t=[...c],n=t[u.current];t.splice(u.current,1),t.splice(d.current,0,n),u.current=null,d.current=null;let r=t.map((e,t)=>({...e,sort_order:t}));l(r),a(r)},g=e=>{if(!e||c.some(t=>t.media_id===e.id))return;let t={id:`temp-${Date.now()}`,media_id:e.id,file_path:e.file_path||e.object_key,alt:e.description||e.file_name||``,sort_order:c.length,isNew:!0},n=[...c,t];l(n),a(n)},_=e=>{let t=c.filter((t,n)=>n!==e).map((e,t)=>({...e,sort_order:t}));l(t),a(t)};return(0,r.jsxs)(`div`,{className:`space-y-4`,children:[(0,r.jsxs)(`div`,{className:`grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4`,children:[c.map((e,t)=>(0,r.jsxs)(`div`,{className:`group relative aspect-square bg-muted/40 rounded-lg border overflow-hidden cursor-move transition-all hover:shadow-md`,draggable:!0,onDragStart:e=>f(e,t),onDragEnter:e=>p(e,t),onDragOver:m,onDrop:h,children:[t===0&&(0,r.jsx)(`div`,{className:`absolute top-2 left-2 z-10 bg-primary text-primary-foreground text-[10px] font-bold px-2 py-0.5 rounded shadow-sm`,children:`MAIN`}),(0,r.jsx)(`button`,{type:`button`,onClick:()=>_(t),className:`absolute top-1 right-1 z-20 p-1 bg-destructive/90 text-destructive-foreground rounded-full opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,r.jsx)(n.X,{className:`w-3 h-3`})}),(0,r.jsx)(`div`,{className:`absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors pointer-events-none`}),(0,r.jsx)(`div`,{className:`absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,r.jsx)(n.GripVertical,{className:`w-4 h-4 text-white drop-shadow-md`})}),o(e.file_path)?(0,r.jsx)(i.default,{src:o(e.file_path),alt:e.alt,fill:!0,className:`object-cover`,sizes:`(max-width: 768px) 50vw, 33vw`}):(0,r.jsx)(`div`,{className:`flex h-full w-full items-center justify-center text-muted-foreground`,children:(0,r.jsx)(n.Image,{className:`w-8 h-8 opacity-30`})})]},e.id)),s?t.default.cloneElement(s,{onSelect:g,children:(0,r.jsxs)(`button`,{type:`button`,className:`group relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground hover:bg-muted/20 hover:border-muted-foreground/50 transition-all focus:outline-none focus:ring-2 focus:ring-primary`,children:[(0,r.jsx)(n.Image,{className:`w-8 h-8 mb-2 opacity-50 group-hover:opacity-75 transition-opacity`}),(0,r.jsx)(`span`,{className:`text-sm font-medium`,children:`Add Image`})]})}):(0,r.jsxs)(`div`,{className:`relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground`,children:[(0,r.jsx)(n.Image,{className:`w-8 h-8 mb-2 opacity-30`}),(0,r.jsx)(`span`,{className:`text-xs text-center px-2`,children:`Media Picker not injected`})]})]}),(0,r.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Drag and drop images to reorder. The first image will be used as the main product image.`})]})};exports.ProductMediaManager=s;
@@ -1,104 +1,107 @@
1
- 'use client';
2
- import { jsxs as i, jsx as t } from "react/jsx-runtime";
3
- import D, { useState as j, useRef as f, useEffect as E } from "react";
4
- import { X as R, GripVertical as S, Image as p } from "lucide-react";
5
- import A from "next/image";
6
- const h = process.env.NEXT_PUBLIC_R2_BASE_URL || "", v = (s) => s ? s.startsWith("http") || !h ? s : `${h.replace(/\/+$/, "")}/${s.replace(/^\/+/, "")}` : "", z = ({ initialMedia: s, onUpdate: m, mediaPickerNode: g }) => {
7
- const [n, d] = j(s), c = f(null), u = f(null);
8
- E(() => {
9
- d(s);
10
- }, [s]);
11
- const b = (e, r) => {
12
- c.current = r, e.dataTransfer.effectAllowed = "move";
13
- }, x = (e, r) => {
14
- u.current = r, e.preventDefault();
15
- }, y = (e) => {
16
- e.preventDefault();
17
- }, w = (e) => {
18
- if (e.preventDefault(), c.current === null || u.current === null) return;
19
- const r = [...n], o = r[c.current];
20
- r.splice(c.current, 1), r.splice(u.current, 0, o), c.current = null, u.current = null;
21
- const a = r.map((l, I) => ({
22
- ...l,
23
- sort_order: I
24
- }));
25
- d(a), m(a);
26
- }, N = (e) => {
27
- if (!e || n.some((a) => a.media_id === e.id))
28
- return;
29
- const r = {
30
- id: `temp-${Date.now()}`,
31
- // Temp ID
32
- media_id: e.id,
33
- file_path: e.file_path || e.object_key,
34
- alt: e.description || e.file_name || "",
35
- sort_order: n.length,
36
- isNew: !0
37
- }, o = [...n, r];
38
- d(o), m(o);
39
- }, _ = (e) => {
40
- const o = n.filter((a, l) => l !== e).map((a, l) => ({ ...a, sort_order: l }));
41
- d(o), m(o);
42
- };
43
- return /* @__PURE__ */ i("div", { className: "space-y-4", children: [
44
- /* @__PURE__ */ i("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4", children: [
45
- n.map((e, r) => /* @__PURE__ */ i(
46
- "div",
47
- {
48
- className: "group relative aspect-square bg-muted/40 rounded-lg border overflow-hidden cursor-move transition-all hover:shadow-md",
49
- draggable: !0,
50
- onDragStart: (o) => b(o, r),
51
- onDragEnter: (o) => x(o, r),
52
- onDragOver: y,
53
- onDrop: w,
54
- children: [
55
- r === 0 && /* @__PURE__ */ t("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" }),
56
- /* @__PURE__ */ t(
57
- "button",
58
- {
59
- type: "button",
60
- onClick: () => _(r),
61
- 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",
62
- children: /* @__PURE__ */ t(R, { className: "w-3 h-3" })
63
- }
64
- ),
65
- /* @__PURE__ */ t("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors pointer-events-none" }),
66
- /* @__PURE__ */ t("div", { className: "absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ t(S, { className: "w-4 h-4 text-white drop-shadow-md" }) }),
67
- v(e.file_path) ? /* @__PURE__ */ t(
68
- A,
69
- {
70
- src: v(e.file_path),
71
- alt: e.alt,
72
- fill: !0,
73
- className: "object-cover",
74
- sizes: "(max-width: 768px) 50vw, 33vw"
75
- }
76
- ) : /* @__PURE__ */ t("div", { className: "flex h-full w-full items-center justify-center text-muted-foreground", children: /* @__PURE__ */ t(p, { className: "w-8 h-8 opacity-30" }) })
77
- ]
78
- },
79
- e.id
80
- )),
81
- g ? D.cloneElement(g, {
82
- onSelect: N,
83
- children: /* @__PURE__ */ i(
84
- "button",
85
- {
86
- type: "button",
87
- 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",
88
- children: [
89
- /* @__PURE__ */ t(p, { className: "w-8 h-8 mb-2 opacity-50 group-hover:opacity-75 transition-opacity" }),
90
- /* @__PURE__ */ t("span", { className: "text-sm font-medium", children: "Add Image" })
91
- ]
92
- }
93
- )
94
- }) : /* @__PURE__ */ i("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: [
95
- /* @__PURE__ */ t(p, { className: "w-8 h-8 mb-2 opacity-30" }),
96
- /* @__PURE__ */ t("span", { className: "text-xs text-center px-2", children: "Media Picker not injected" })
97
- ] })
98
- ] }),
99
- /* @__PURE__ */ t("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." })
100
- ] });
101
- };
102
- export {
103
- z as ProductMediaManager
1
+ "use client";
2
+ import e, { useEffect as t, useRef as n, useState as r } from "react";
3
+ import { GripVertical as i, Image as a, X as o } from "lucide-react";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import l from "next/image";
6
+ //#region libs/ecommerce/src/lib/pages/cms/products/components/ProductMediaManager.tsx
7
+ var u = process.env.NEXT_PUBLIC_R2_BASE_URL || "", d = (e) => e ? e.startsWith("http") || !u ? e : `${u.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}` : "", f = ({ initialMedia: u, onUpdate: f, mediaPickerNode: p }) => {
8
+ let [m, h] = r(u), g = n(null), _ = n(null);
9
+ t(() => {
10
+ h(u);
11
+ }, [u]);
12
+ let v = (e, t) => {
13
+ g.current = t, e.dataTransfer.effectAllowed = "move";
14
+ }, y = (e, t) => {
15
+ _.current = t, e.preventDefault();
16
+ }, b = (e) => {
17
+ e.preventDefault();
18
+ }, x = (e) => {
19
+ if (e.preventDefault(), g.current === null || _.current === null) return;
20
+ let t = [...m], n = t[g.current];
21
+ t.splice(g.current, 1), t.splice(_.current, 0, n), g.current = null, _.current = null;
22
+ let r = t.map((e, t) => ({
23
+ ...e,
24
+ sort_order: t
25
+ }));
26
+ h(r), f(r);
27
+ }, S = (e) => {
28
+ if (!e || m.some((t) => t.media_id === e.id)) return;
29
+ let t = {
30
+ id: `temp-${Date.now()}`,
31
+ media_id: e.id,
32
+ file_path: e.file_path || e.object_key,
33
+ alt: e.description || e.file_name || "",
34
+ sort_order: m.length,
35
+ isNew: !0
36
+ }, n = [...m, t];
37
+ h(n), f(n);
38
+ }, C = (e) => {
39
+ let t = m.filter((t, n) => n !== e).map((e, t) => ({
40
+ ...e,
41
+ sort_order: t
42
+ }));
43
+ h(t), f(t);
44
+ };
45
+ return /* @__PURE__ */ c("div", {
46
+ className: "space-y-4",
47
+ children: [/* @__PURE__ */ c("div", {
48
+ className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-4",
49
+ children: [m.map((e, t) => /* @__PURE__ */ c("div", {
50
+ className: "group relative aspect-square bg-muted/40 rounded-lg border overflow-hidden cursor-move transition-all hover:shadow-md",
51
+ draggable: !0,
52
+ onDragStart: (e) => v(e, t),
53
+ onDragEnter: (e) => y(e, t),
54
+ onDragOver: b,
55
+ onDrop: x,
56
+ children: [
57
+ t === 0 && /* @__PURE__ */ s("div", {
58
+ 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",
59
+ children: "MAIN"
60
+ }),
61
+ /* @__PURE__ */ s("button", {
62
+ type: "button",
63
+ onClick: () => C(t),
64
+ 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",
65
+ children: /* @__PURE__ */ s(o, { className: "w-3 h-3" })
66
+ }),
67
+ /* @__PURE__ */ s("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/5 transition-colors pointer-events-none" }),
68
+ /* @__PURE__ */ s("div", {
69
+ className: "absolute bottom-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity",
70
+ children: /* @__PURE__ */ s(i, { className: "w-4 h-4 text-white drop-shadow-md" })
71
+ }),
72
+ d(e.file_path) ? /* @__PURE__ */ s(l, {
73
+ src: d(e.file_path),
74
+ alt: e.alt,
75
+ fill: !0,
76
+ className: "object-cover",
77
+ sizes: "(max-width: 768px) 50vw, 33vw"
78
+ }) : /* @__PURE__ */ s("div", {
79
+ className: "flex h-full w-full items-center justify-center text-muted-foreground",
80
+ children: /* @__PURE__ */ s(a, { className: "w-8 h-8 opacity-30" })
81
+ })
82
+ ]
83
+ }, e.id)), p ? e.cloneElement(p, {
84
+ onSelect: S,
85
+ children: /* @__PURE__ */ c("button", {
86
+ type: "button",
87
+ 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",
88
+ children: [/* @__PURE__ */ s(a, { className: "w-8 h-8 mb-2 opacity-50 group-hover:opacity-75 transition-opacity" }), /* @__PURE__ */ s("span", {
89
+ className: "text-sm font-medium",
90
+ children: "Add Image"
91
+ })]
92
+ })
93
+ }) : /* @__PURE__ */ c("div", {
94
+ className: "relative aspect-square flex flex-col items-center justify-center border-2 border-dashed rounded-lg bg-muted/10 text-muted-foreground",
95
+ children: [/* @__PURE__ */ s(a, { className: "w-8 h-8 mb-2 opacity-30" }), /* @__PURE__ */ s("span", {
96
+ className: "text-xs text-center px-2",
97
+ children: "Media Picker not injected"
98
+ })]
99
+ })]
100
+ }), /* @__PURE__ */ s("p", {
101
+ className: "text-xs text-muted-foreground",
102
+ children: "Drag and drop images to reorder. The first image will be used as the main product image."
103
+ })]
104
+ });
104
105
  };
106
+ //#endregion
107
+ export { f as ProductMediaManager };
@@ -1 +1 @@
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
+ "use client";const e=require("../../../../../_virtual/_rolldown/runtime.cjs.js"),t=require("./DeleteProductButton.cjs.js");let n=require("next/link");n=e.__toESM(n,1);let r=require("react"),i=require("lucide-react"),a=require("@nextblock-cms/utils"),o=require("react/jsx-runtime"),s=require("next/navigation"),c=require("next/image");c=e.__toESM(c,1);let l=require("@nextblock-cms/ui");var u=process.env.NEXT_PUBLIC_R2_BASE_URL||``;function d(e){return e?e.startsWith(`http`)||!u?e:`${u.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`:null}function f({products:e,languageLabels:u,defaultCurrencyCode:f,deleteProductAction:p,bulkDeleteProductsAction:m,bulkDraftProductsAction:h}){let g=(0,s.useRouter)(),[_,v]=(0,r.useState)(()=>new Set),[y,b]=(0,r.useState)(``),[x,S]=(0,r.useState)(null),[C,w]=(0,r.useState)(null),[T,E]=(0,r.useTransition)(),D=(0,r.useMemo)(()=>{let t=y.trim().toLowerCase();return t?e.filter(e=>{let n=u[String(e.language_id)]||``;return[e.title,e.sku,e.slug,e.status,n].filter(Boolean).join(` `).toLowerCase().includes(t)}):e},[u,e,y]),[O,k]=(0,r.useState)(1),[A,j]=(0,r.useState)(25);(0,r.useEffect)(()=>{k(1)},[y]);let M=D.length,N=Math.max(1,Math.ceil(M/A)),P=Math.min(O,N),F=(0,r.useMemo)(()=>{let e=(P-1)*A;return D.slice(e,e+A)},[D,P,A]),I=(0,r.useMemo)(()=>e.map(e=>e.id),[e]),L=(0,r.useMemo)(()=>F.map(e=>e.id),[F]),R=(0,r.useMemo)(()=>e.filter(e=>_.has(e.id)),[e,_]).length,z=R>1,B=L.filter(e=>_.has(e)).length,V=L.length>0&&L.every(e=>_.has(e)),H=B>0&&!V;(0,r.useEffect)(()=>{let e=new Set(I);v(t=>{let n=new Set(Array.from(t).filter(t=>e.has(t)));return n.size===t.size?t:n})},[I]);let U=e=>{v(t=>{let n=new Set(t);return e?L.forEach(e=>n.add(e)):L.forEach(e=>n.delete(e)),n})},W=(e,t)=>{v(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},G=(e,t,n)=>{if(R===0){S(`Select at least one product first.`);return}window.confirm(t)&&(S(null),w(e),E(async()=>{try{let e=await n(Array.from(_));if(!e.success){S(e.error||`Bulk action failed. Please try again.`),w(null);return}v(new Set),g.refresh()}catch(e){console.error(`Bulk product action failed:`,e),S(`Bulk action failed. Please try again.`)}finally{w(null)}}))};return(0,o.jsxs)(`div`,{className:`rounded-lg border overflow-hidden dark:border-slate-700`,children:[(0,o.jsxs)(`div`,{className:`flex min-h-14 flex-wrap items-center justify-between gap-3 border-b bg-muted/20 px-4 py-3`,children:[(0,o.jsxs)(`div`,{className:`flex min-w-[260px] flex-1 flex-wrap items-center gap-3`,children:[(0,o.jsxs)(`div`,{className:`relative w-full max-w-sm`,children:[(0,o.jsx)(i.Search,{className:`pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,o.jsx)(l.Input,{value:y,onChange:e=>b(e.target.value),placeholder:`Search products...`,className:`h-9 pl-9`,"aria-label":`Search products`})]}),R>0?(0,o.jsxs)(`span`,{className:`text-sm font-medium text-foreground`,children:[R,` selected`]}):null,x?(0,o.jsx)(`span`,{className:`text-sm text-destructive`,children:x}):null]}),z?(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,o.jsxs)(l.Button,{variant:`outline`,size:`sm`,disabled:T,onClick:()=>G(`Moving to draft...`,`Move ${R} selected products to draft?`,h),children:[(0,o.jsx)(i.Archive,{className:`mr-2 h-4 w-4`}),C===`Moving to draft...`?C:`Set Draft`]}),(0,o.jsxs)(l.Button,{variant:`destructive`,size:`sm`,disabled:T,onClick:()=>G(`Deleting...`,`Delete ${R} selected products? This action cannot be undone.`,m),children:[(0,o.jsx)(i.Trash2,{className:`mr-2 h-4 w-4`}),C===`Deleting...`?C:`Delete`]})]}):null]}),(0,o.jsxs)(l.Table,{children:[(0,o.jsx)(l.TableHeader,{children:(0,o.jsxs)(l.TableRow,{children:[(0,o.jsx)(l.TableHead,{className:`w-12`,children:(0,o.jsx)(l.Checkbox,{checked:V?!0:H?`indeterminate`:!1,onCheckedChange:e=>U(e===!0),"aria-label":`Select all products on this page`})}),(0,o.jsx)(l.TableHead,{children:`Image`}),(0,o.jsx)(l.TableHead,{children:`Title`}),(0,o.jsx)(l.TableHead,{children:`SKU`}),(0,o.jsx)(l.TableHead,{children:`Price`}),(0,o.jsx)(l.TableHead,{children:`Language`}),(0,o.jsx)(l.TableHead,{children:`SEO`}),(0,o.jsx)(l.TableHead,{children:`Stock`}),(0,o.jsx)(l.TableHead,{children:`Status`}),(0,o.jsx)(l.TableHead,{className:`text-right`,children:`Actions`})]})}),(0,o.jsx)(l.TableBody,{children:F.length>0?F.map(e=>{let r=d(e.product_media?.[0]?.media?.file_path||e.product_media?.[0]?.media?.object_key);return(0,o.jsxs)(l.TableRow,{"data-state":_.has(e.id)?`selected`:void 0,children:[(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.Checkbox,{checked:_.has(e.id),onCheckedChange:t=>W(e.id,t===!0),"aria-label":`Select ${e.title}`})}),(0,o.jsx)(l.TableCell,{children:r?(0,o.jsx)(c.default,{src:r,alt:e.title,width:40,height:40,className:`w-10 h-10 object-cover rounded`}):(0,o.jsx)(`div`,{className:`w-10 h-10 bg-gray-200 rounded flex items-center justify-center text-xs text-gray-500`,children:`No Img`})}),(0,o.jsx)(l.TableCell,{className:`font-medium`,children:(0,o.jsx)(n.default,{href:`/cms/products/${e.id}/edit`,className:`hover:underline`,children:e.title})}),(0,o.jsx)(l.TableCell,{children:e.sku}),(0,o.jsx)(l.TableCell,{children:(0,o.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,o.jsx)(`span`,{className:e.sale_price?`font-semibold text-primary`:``,children:typeof(e.sale_price??e.price)==`number`?(0,a.formatPrice)(e.sale_price??e.price??0,f):`N/A`}),e.sale_price?(0,o.jsx)(`span`,{className:`text-sm text-muted-foreground line-through`,children:(0,a.formatPrice)(e.price??0,f)}):null]})}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.Badge,{variant:`outline`,children:u[String(e.language_id)]||`N/A`})}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(l.SeoScoreBadge,{score:e.seo_score})}),(0,o.jsx)(l.TableCell,{children:e.stock}),(0,o.jsx)(l.TableCell,{children:(0,o.jsx)(`span`,{className:`px-2 py-1 rounded text-xs ${e.status===`active`?`bg-green-100 text-green-800`:e.status===`archived`?`bg-gray-100 text-gray-800`:`bg-yellow-100 text-yellow-800`}`,children:e.status})}),(0,o.jsxs)(l.TableCell,{className:`text-right flex justify-end gap-2 items-center`,children:[e.slug?(0,o.jsx)(n.default,{href:`/product/${e.slug}`,target:`_blank`,rel:`noopener noreferrer`,children:(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,children:`View Product`})}):null,(0,o.jsx)(n.default,{href:`/cms/products/${e.id}/edit`,children:(0,o.jsx)(l.Button,{variant:`ghost`,size:`sm`,children:`Edit`})}),(0,o.jsx)(t.DeleteProductButton,{productName:e.title,isIcon:!0,deleteAction:()=>p(e.id)})]})]},e.id)}):(0,o.jsx)(l.TableRow,{children:(0,o.jsx)(l.TableCell,{colSpan:10,className:`text-center py-10`,children:e.length===0?`No products found.`:`No products match your search.`})})})]}),M>0&&(0,o.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-center justify-between gap-4 px-2 py-4 text-sm text-muted-foreground`,children:[(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`span`,{children:`Rows per page:`}),(0,o.jsxs)(l.Select,{value:String(A),onValueChange:e=>{j(Number(e)),k(1)},children:[(0,o.jsx)(l.SelectTrigger,{className:`h-8 w-[70px]`,children:(0,o.jsx)(l.SelectValue,{placeholder:String(A)})}),(0,o.jsx)(l.SelectContent,{side:`top`,children:[10,25,50,100].map(e=>(0,o.jsx)(l.SelectItem,{value:String(e),children:e},e))})]}),(0,o.jsxs)(`span`,{className:`ml-2`,children:[`Showing `,(P-1)*A+1,` to `,Math.min(P*A,M),` of `,M,` products`]})]}),(0,o.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,o.jsxs)(`span`,{children:[`Page `,P,` of `,N]}),(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>k(e=>Math.max(1,e-1)),disabled:P<=1,"aria-label":`Previous page`,children:(0,o.jsx)(i.ChevronLeft,{className:`h-4 w-4`})}),(0,o.jsx)(l.Button,{variant:`outline`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>k(e=>Math.min(N,e+1)),disabled:P>=N,"aria-label":`Next page`,children:(0,o.jsx)(i.ChevronRight,{className:`h-4 w-4`})})]})]})]})}exports.ProductsBulkTable=f;
@@ -29,5 +29,5 @@ interface ProductsBulkTableProps {
29
29
  bulkDeleteProductsAction: (productIds: string[]) => BulkActionResult;
30
30
  bulkDraftProductsAction: (productIds: string[]) => BulkActionResult;
31
31
  }
32
- export declare function ProductsBulkTable({ products, languageLabels, defaultCurrencyCode, deleteProductAction, bulkDeleteProductsAction, bulkDraftProductsAction, }: ProductsBulkTableProps): import("react").JSX.Element;
32
+ export declare function ProductsBulkTable({ products, languageLabels, defaultCurrencyCode, deleteProductAction, bulkDeleteProductsAction, bulkDraftProductsAction, }: ProductsBulkTableProps): import('react').JSX.Element;
33
33
  export {};