@aglyn/plugins-commerce 1.0.0-beta.143

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 (417) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +10 -0
  3. package/package.json +57 -0
  4. package/src/index.d.ts +38 -0
  5. package/src/index.js +38 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/components/account.d.ts +31 -0
  8. package/src/lib/components/account.js +645 -0
  9. package/src/lib/components/account.js.map +1 -0
  10. package/src/lib/components/cart.d.ts +38 -0
  11. package/src/lib/components/cart.js +851 -0
  12. package/src/lib/components/cart.js.map +1 -0
  13. package/src/lib/components/commerce-console-page.d.ts +32 -0
  14. package/src/lib/components/commerce-console-page.js +296 -0
  15. package/src/lib/components/commerce-console-page.js.map +1 -0
  16. package/src/lib/components/commerce-console-sections.d.ts +34 -0
  17. package/src/lib/components/commerce-console-sections.js +62 -0
  18. package/src/lib/components/commerce-console-sections.js.map +1 -0
  19. package/src/lib/components/console/catalog-organization-card.component.d.ts +14 -0
  20. package/src/lib/components/console/catalog-organization-card.component.js +1087 -0
  21. package/src/lib/components/console/catalog-organization-card.component.js.map +1 -0
  22. package/src/lib/components/console/commerce-analytics-card.component.d.ts +27 -0
  23. package/src/lib/components/console/commerce-analytics-card.component.js +310 -0
  24. package/src/lib/components/console/commerce-analytics-card.component.js.map +1 -0
  25. package/src/lib/components/console/commerce-glance-card.component.d.ts +20 -0
  26. package/src/lib/components/console/commerce-glance-card.component.js +340 -0
  27. package/src/lib/components/console/commerce-glance-card.component.js.map +1 -0
  28. package/src/lib/components/console/commerce-stat-tile.component.d.ts +37 -0
  29. package/src/lib/components/console/commerce-stat-tile.component.js +72 -0
  30. package/src/lib/components/console/commerce-stat-tile.component.js.map +1 -0
  31. package/src/lib/components/console/discounts-card.component.d.ts +14 -0
  32. package/src/lib/components/console/discounts-card.component.js +443 -0
  33. package/src/lib/components/console/discounts-card.component.js.map +1 -0
  34. package/src/lib/components/console/entitlement-gate.component.d.ts +76 -0
  35. package/src/lib/components/console/entitlement-gate.component.js +115 -0
  36. package/src/lib/components/console/entitlement-gate.component.js.map +1 -0
  37. package/src/lib/components/console/gift-cards-card.component.d.ts +29 -0
  38. package/src/lib/components/console/gift-cards-card.component.js +379 -0
  39. package/src/lib/components/console/gift-cards-card.component.js.map +1 -0
  40. package/src/lib/components/console/host-coupons-card.component.d.ts +14 -0
  41. package/src/lib/components/console/host-coupons-card.component.js +252 -0
  42. package/src/lib/components/console/host-coupons-card.component.js.map +1 -0
  43. package/src/lib/components/console/host-orders-card.component.d.ts +13 -0
  44. package/src/lib/components/console/host-orders-card.component.js +861 -0
  45. package/src/lib/components/console/host-orders-card.component.js.map +1 -0
  46. package/src/lib/components/console/locations-card.component.d.ts +14 -0
  47. package/src/lib/components/console/locations-card.component.js +256 -0
  48. package/src/lib/components/console/locations-card.component.js.map +1 -0
  49. package/src/lib/components/console/member-posts-card.component.d.ts +8 -0
  50. package/src/lib/components/console/member-posts-card.component.js +283 -0
  51. package/src/lib/components/console/member-posts-card.component.js.map +1 -0
  52. package/src/lib/components/console/newest-site-users-card.component.d.ts +36 -0
  53. package/src/lib/components/console/newest-site-users-card.component.js +126 -0
  54. package/src/lib/components/console/newest-site-users-card.component.js.map +1 -0
  55. package/src/lib/components/console/order-detail-dialog.component.d.ts +28 -0
  56. package/src/lib/components/console/order-detail-dialog.component.js +976 -0
  57. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -0
  58. package/src/lib/components/console/paid-media.d.ts +127 -0
  59. package/src/lib/components/console/paid-media.js +397 -0
  60. package/src/lib/components/console/paid-media.js.map +1 -0
  61. package/src/lib/components/console/payments-settings-card.component.d.ts +13 -0
  62. package/src/lib/components/console/payments-settings-card.component.js +295 -0
  63. package/src/lib/components/console/payments-settings-card.component.js.map +1 -0
  64. package/src/lib/components/console/pos-page.component.d.ts +13 -0
  65. package/src/lib/components/console/pos-page.component.js +916 -0
  66. package/src/lib/components/console/pos-page.component.js.map +1 -0
  67. package/src/lib/components/console/product-editor-dialog.component.d.ts +32 -0
  68. package/src/lib/components/console/product-editor-dialog.component.js +1374 -0
  69. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -0
  70. package/src/lib/components/console/products-hub-card.component.d.ts +16 -0
  71. package/src/lib/components/console/products-hub-card.component.js +1280 -0
  72. package/src/lib/components/console/products-hub-card.component.js.map +1 -0
  73. package/src/lib/components/console/products-hub-zone.component.d.ts +50 -0
  74. package/src/lib/components/console/products-hub-zone.component.js +200 -0
  75. package/src/lib/components/console/products-hub-zone.component.js.map +1 -0
  76. package/src/lib/components/console/recovery-queue-card.component.d.ts +39 -0
  77. package/src/lib/components/console/recovery-queue-card.component.js +262 -0
  78. package/src/lib/components/console/recovery-queue-card.component.js.map +1 -0
  79. package/src/lib/components/console/registers-card.component.d.ts +21 -0
  80. package/src/lib/components/console/registers-card.component.js +296 -0
  81. package/src/lib/components/console/registers-card.component.js.map +1 -0
  82. package/src/lib/components/console/reservations-card.component.d.ts +14 -0
  83. package/src/lib/components/console/reservations-card.component.js +650 -0
  84. package/src/lib/components/console/reservations-card.component.js.map +1 -0
  85. package/src/lib/components/console/reviews-moderation-card.component.d.ts +8 -0
  86. package/src/lib/components/console/reviews-moderation-card.component.js +235 -0
  87. package/src/lib/components/console/reviews-moderation-card.component.js.map +1 -0
  88. package/src/lib/components/console/shipping-settings-card.component.d.ts +38 -0
  89. package/src/lib/components/console/shipping-settings-card.component.js +560 -0
  90. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -0
  91. package/src/lib/components/console/stock-movements-card.component.d.ts +31 -0
  92. package/src/lib/components/console/stock-movements-card.component.js +333 -0
  93. package/src/lib/components/console/stock-movements-card.component.js.map +1 -0
  94. package/src/lib/components/console/store-settings-card.component.d.ts +14 -0
  95. package/src/lib/components/console/store-settings-card.component.js +300 -0
  96. package/src/lib/components/console/store-settings-card.component.js.map +1 -0
  97. package/src/lib/components/console/storefront-tax-summary-card.component.d.ts +73 -0
  98. package/src/lib/components/console/storefront-tax-summary-card.component.js +408 -0
  99. package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -0
  100. package/src/lib/components/console/suppliers-card.component.d.ts +8 -0
  101. package/src/lib/components/console/suppliers-card.component.js +328 -0
  102. package/src/lib/components/console/suppliers-card.component.js.map +1 -0
  103. package/src/lib/components/console/tax-settings-card.component.d.ts +14 -0
  104. package/src/lib/components/console/tax-settings-card.component.js +473 -0
  105. package/src/lib/components/console/tax-settings-card.component.js.map +1 -0
  106. package/src/lib/components/gate.d.ts +39 -0
  107. package/src/lib/components/gate.js +202 -0
  108. package/src/lib/components/gate.js.map +1 -0
  109. package/src/lib/components/gated-video.d.ts +40 -0
  110. package/src/lib/components/gated-video.js +366 -0
  111. package/src/lib/components/gated-video.js.map +1 -0
  112. package/src/lib/components/member-feed.d.ts +32 -0
  113. package/src/lib/components/member-feed.js +198 -0
  114. package/src/lib/components/member-feed.js.map +1 -0
  115. package/src/lib/components/member-recovery.d.ts +35 -0
  116. package/src/lib/components/member-recovery.js +313 -0
  117. package/src/lib/components/member-recovery.js.map +1 -0
  118. package/src/lib/components/member-signin.d.ts +35 -0
  119. package/src/lib/components/member-signin.js +257 -0
  120. package/src/lib/components/member-signin.js.map +1 -0
  121. package/src/lib/components/member-signup.d.ts +34 -0
  122. package/src/lib/components/member-signup.js +287 -0
  123. package/src/lib/components/member-signup.js.map +1 -0
  124. package/src/lib/components/newsletter-signup.d.ts +39 -0
  125. package/src/lib/components/newsletter-signup.js +229 -0
  126. package/src/lib/components/newsletter-signup.js.map +1 -0
  127. package/src/lib/components/product-detail.d.ts +38 -0
  128. package/src/lib/components/product-detail.js +1022 -0
  129. package/src/lib/components/product-detail.js.map +1 -0
  130. package/src/lib/components/product-grid.d.ts +67 -0
  131. package/src/lib/components/product-grid.js +909 -0
  132. package/src/lib/components/product-grid.js.map +1 -0
  133. package/src/lib/components/product-reviews.d.ts +32 -0
  134. package/src/lib/components/product-reviews.js +349 -0
  135. package/src/lib/components/product-reviews.js.map +1 -0
  136. package/src/lib/components/related-products.d.ts +33 -0
  137. package/src/lib/components/related-products.js +232 -0
  138. package/src/lib/components/related-products.js.map +1 -0
  139. package/src/lib/components/reservation-widget.d.ts +33 -0
  140. package/src/lib/components/reservation-widget.js +418 -0
  141. package/src/lib/components/reservation-widget.js.map +1 -0
  142. package/src/lib/components/storefront-payment-element-fallback.d.ts +18 -0
  143. package/src/lib/components/storefront-payment-element-fallback.js +51 -0
  144. package/src/lib/components/storefront-payment-element-fallback.js.map +1 -0
  145. package/src/lib/components/storefront-payment-element.d.ts +78 -0
  146. package/src/lib/components/storefront-payment-element.js +156 -0
  147. package/src/lib/components/storefront-payment-element.js.map +1 -0
  148. package/src/lib/components/wishlist.d.ts +46 -0
  149. package/src/lib/components/wishlist.js +304 -0
  150. package/src/lib/components/wishlist.js.map +1 -0
  151. package/src/lib/constants/bundle-common.d.ts +18 -0
  152. package/src/lib/constants/bundle-common.js +18 -0
  153. package/src/lib/constants/bundle-common.js.map +1 -0
  154. package/src/lib/constants/product-filters.d.ts +35 -0
  155. package/src/lib/constants/product-filters.js +109 -0
  156. package/src/lib/constants/product-filters.js.map +1 -0
  157. package/src/lib/model/commerce-cart.d.ts +52 -0
  158. package/src/lib/model/commerce-cart.js +102 -0
  159. package/src/lib/model/commerce-cart.js.map +1 -0
  160. package/src/lib/model/commerce-connect-transfer.d.ts +243 -0
  161. package/src/lib/model/commerce-connect-transfer.js +231 -0
  162. package/src/lib/model/commerce-connect-transfer.js.map +1 -0
  163. package/src/lib/model/commerce-discounts.d.ts +164 -0
  164. package/src/lib/model/commerce-discounts.js +231 -0
  165. package/src/lib/model/commerce-discounts.js.map +1 -0
  166. package/src/lib/model/commerce-dispute.d.ts +124 -0
  167. package/src/lib/model/commerce-dispute.js +225 -0
  168. package/src/lib/model/commerce-dispute.js.map +1 -0
  169. package/src/lib/model/commerce-gift-cards.d.ts +107 -0
  170. package/src/lib/model/commerce-gift-cards.js +121 -0
  171. package/src/lib/model/commerce-gift-cards.js.map +1 -0
  172. package/src/lib/model/commerce-io.d.ts +36 -0
  173. package/src/lib/model/commerce-io.js +245 -0
  174. package/src/lib/model/commerce-io.js.map +1 -0
  175. package/src/lib/model/commerce-orders.d.ts +1040 -0
  176. package/src/lib/model/commerce-orders.js +1022 -0
  177. package/src/lib/model/commerce-orders.js.map +1 -0
  178. package/src/lib/model/commerce-promotions.d.ts +188 -0
  179. package/src/lib/model/commerce-promotions.js +199 -0
  180. package/src/lib/model/commerce-promotions.js.map +1 -0
  181. package/src/lib/model/commerce-reservations.d.ts +175 -0
  182. package/src/lib/model/commerce-reservations.js +157 -0
  183. package/src/lib/model/commerce-reservations.js.map +1 -0
  184. package/src/lib/model/commerce-shipping.d.ts +316 -0
  185. package/src/lib/model/commerce-shipping.js +484 -0
  186. package/src/lib/model/commerce-shipping.js.map +1 -0
  187. package/src/lib/model/commerce-stock-holds.d.ts +199 -0
  188. package/src/lib/model/commerce-stock-holds.js +190 -0
  189. package/src/lib/model/commerce-stock-holds.js.map +1 -0
  190. package/src/lib/model/commerce-subscription-status.d.ts +67 -0
  191. package/src/lib/model/commerce-subscription-status.js +76 -0
  192. package/src/lib/model/commerce-subscription-status.js.map +1 -0
  193. package/src/lib/model/commerce-tax-decision.d.ts +222 -0
  194. package/src/lib/model/commerce-tax-decision.js +165 -0
  195. package/src/lib/model/commerce-tax-decision.js.map +1 -0
  196. package/src/lib/model/commerce-tax.d.ts +176 -0
  197. package/src/lib/model/commerce-tax.js +92 -0
  198. package/src/lib/model/commerce-tax.js.map +1 -0
  199. package/src/lib/model/commerce.d.ts +551 -0
  200. package/src/lib/model/commerce.js +739 -0
  201. package/src/lib/model/commerce.js.map +1 -0
  202. package/src/lib/model/index.d.ts +40 -0
  203. package/src/lib/model/index.js +40 -0
  204. package/src/lib/model/index.js.map +1 -0
  205. package/src/lib/model/order-figures.d.ts +48 -0
  206. package/src/lib/model/order-figures.js +74 -0
  207. package/src/lib/model/order-figures.js.map +1 -0
  208. package/src/lib/model/plugin-permissions.d.ts +23 -0
  209. package/src/lib/model/plugin-permissions.js +34 -0
  210. package/src/lib/model/plugin-permissions.js.map +1 -0
  211. package/src/lib/model/purchase-analytics.d.ts +186 -0
  212. package/src/lib/model/purchase-analytics.js +216 -0
  213. package/src/lib/model/purchase-analytics.js.map +1 -0
  214. package/src/lib/plugin-config.d.ts +62 -0
  215. package/src/lib/plugin-config.js +78 -0
  216. package/src/lib/plugin-config.js.map +1 -0
  217. package/src/lib/plugin.d.ts +28 -0
  218. package/src/lib/plugin.js +147 -0
  219. package/src/lib/plugin.js.map +1 -0
  220. package/src/lib/server/billing-webhook.d.ts +26 -0
  221. package/src/lib/server/billing-webhook.js +4011 -0
  222. package/src/lib/server/billing-webhook.js.map +1 -0
  223. package/src/lib/server/cancel-order.d.ts +87 -0
  224. package/src/lib/server/cancel-order.js +368 -0
  225. package/src/lib/server/cancel-order.js.map +1 -0
  226. package/src/lib/server/cart-checkout.d.ts +25 -0
  227. package/src/lib/server/cart-checkout.js +976 -0
  228. package/src/lib/server/cart-checkout.js.map +1 -0
  229. package/src/lib/server/cart-cookie.d.ts +32 -0
  230. package/src/lib/server/cart-cookie.js +77 -0
  231. package/src/lib/server/cart-cookie.js.map +1 -0
  232. package/src/lib/server/cart.d.ts +34 -0
  233. package/src/lib/server/cart.js +181 -0
  234. package/src/lib/server/cart.js.map +1 -0
  235. package/src/lib/server/catalog.d.ts +127 -0
  236. package/src/lib/server/catalog.js +277 -0
  237. package/src/lib/server/catalog.js.map +1 -0
  238. package/src/lib/server/checkout.d.ts +36 -0
  239. package/src/lib/server/checkout.js +915 -0
  240. package/src/lib/server/checkout.js.map +1 -0
  241. package/src/lib/server/connect.d.ts +26 -0
  242. package/src/lib/server/connect.js +238 -0
  243. package/src/lib/server/connect.js.map +1 -0
  244. package/src/lib/server/contact-refund.d.ts +117 -0
  245. package/src/lib/server/contact-refund.js +196 -0
  246. package/src/lib/server/contact-refund.js.map +1 -0
  247. package/src/lib/server/download.d.ts +39 -0
  248. package/src/lib/server/download.js +206 -0
  249. package/src/lib/server/download.js.map +1 -0
  250. package/src/lib/server/draft-order.d.ts +26 -0
  251. package/src/lib/server/draft-order.js +706 -0
  252. package/src/lib/server/draft-order.js.map +1 -0
  253. package/src/lib/server/feed.d.ts +24 -0
  254. package/src/lib/server/feed.js +59 -0
  255. package/src/lib/server/feed.js.map +1 -0
  256. package/src/lib/server/fulfill-order.d.ts +97 -0
  257. package/src/lib/server/fulfill-order.js +235 -0
  258. package/src/lib/server/fulfill-order.js.map +1 -0
  259. package/src/lib/server/gate.d.ts +36 -0
  260. package/src/lib/server/gate.js +112 -0
  261. package/src/lib/server/gate.js.map +1 -0
  262. package/src/lib/server/gift-cards.d.ts +42 -0
  263. package/src/lib/server/gift-cards.js +219 -0
  264. package/src/lib/server/gift-cards.js.map +1 -0
  265. package/src/lib/server/low-stock.d.ts +49 -0
  266. package/src/lib/server/low-stock.js +60 -0
  267. package/src/lib/server/low-stock.js.map +1 -0
  268. package/src/lib/server/manual-tax-rate.d.ts +82 -0
  269. package/src/lib/server/manual-tax-rate.js +113 -0
  270. package/src/lib/server/manual-tax-rate.js.map +1 -0
  271. package/src/lib/server/member-feed.d.ts +24 -0
  272. package/src/lib/server/member-feed.js +72 -0
  273. package/src/lib/server/member-feed.js.map +1 -0
  274. package/src/lib/server/member-name-search.d.ts +37 -0
  275. package/src/lib/server/member-name-search.js +42 -0
  276. package/src/lib/server/member-name-search.js.map +1 -0
  277. package/src/lib/server/member-post.d.ts +23 -0
  278. package/src/lib/server/member-post.js +166 -0
  279. package/src/lib/server/member-post.js.map +1 -0
  280. package/src/lib/server/membership-account.d.ts +37 -0
  281. package/src/lib/server/membership-account.js +148 -0
  282. package/src/lib/server/membership-account.js.map +1 -0
  283. package/src/lib/server/membership-admin-password.d.ts +33 -0
  284. package/src/lib/server/membership-admin-password.js +202 -0
  285. package/src/lib/server/membership-admin-password.js.map +1 -0
  286. package/src/lib/server/membership-content.d.ts +23 -0
  287. package/src/lib/server/membership-content.js +105 -0
  288. package/src/lib/server/membership-content.js.map +1 -0
  289. package/src/lib/server/membership-login.d.ts +19 -0
  290. package/src/lib/server/membership-login.js +137 -0
  291. package/src/lib/server/membership-login.js.map +1 -0
  292. package/src/lib/server/membership-logout.d.ts +19 -0
  293. package/src/lib/server/membership-logout.js +35 -0
  294. package/src/lib/server/membership-logout.js.map +1 -0
  295. package/src/lib/server/membership-recover.d.ts +60 -0
  296. package/src/lib/server/membership-recover.js +244 -0
  297. package/src/lib/server/membership-recover.js.map +1 -0
  298. package/src/lib/server/membership-register.d.ts +22 -0
  299. package/src/lib/server/membership-register.js +241 -0
  300. package/src/lib/server/membership-register.js.map +1 -0
  301. package/src/lib/server/membership-reset.d.ts +26 -0
  302. package/src/lib/server/membership-reset.js +88 -0
  303. package/src/lib/server/membership-reset.js.map +1 -0
  304. package/src/lib/server/membership-wishlist.d.ts +23 -0
  305. package/src/lib/server/membership-wishlist.js +89 -0
  306. package/src/lib/server/membership-wishlist.js.map +1 -0
  307. package/src/lib/server/membership.d.ts +96 -0
  308. package/src/lib/server/membership.js +222 -0
  309. package/src/lib/server/membership.js.map +1 -0
  310. package/src/lib/server/native-checkout.d.ts +170 -0
  311. package/src/lib/server/native-checkout.js +193 -0
  312. package/src/lib/server/native-checkout.js.map +1 -0
  313. package/src/lib/server/newsletter.d.ts +23 -0
  314. package/src/lib/server/newsletter.js +323 -0
  315. package/src/lib/server/newsletter.js.map +1 -0
  316. package/src/lib/server/notify-restock.d.ts +22 -0
  317. package/src/lib/server/notify-restock.js +84 -0
  318. package/src/lib/server/notify-restock.js.map +1 -0
  319. package/src/lib/server/order-analytics.d.ts +134 -0
  320. package/src/lib/server/order-analytics.js +263 -0
  321. package/src/lib/server/order-analytics.js.map +1 -0
  322. package/src/lib/server/order-figures.d.ts +33 -0
  323. package/src/lib/server/order-figures.js +220 -0
  324. package/src/lib/server/order-figures.js.map +1 -0
  325. package/src/lib/server/paid-media-delivery.d.ts +173 -0
  326. package/src/lib/server/paid-media-delivery.js +212 -0
  327. package/src/lib/server/paid-media-delivery.js.map +1 -0
  328. package/src/lib/server/pos-order.d.ts +54 -0
  329. package/src/lib/server/pos-order.js +1137 -0
  330. package/src/lib/server/pos-order.js.map +1 -0
  331. package/src/lib/server/process-abandoned.d.ts +54 -0
  332. package/src/lib/server/process-abandoned.js +222 -0
  333. package/src/lib/server/process-abandoned.js.map +1 -0
  334. package/src/lib/server/process-restock.d.ts +42 -0
  335. package/src/lib/server/process-restock.js +219 -0
  336. package/src/lib/server/process-restock.js.map +1 -0
  337. package/src/lib/server/product-card.d.ts +29 -0
  338. package/src/lib/server/product-card.js +54 -0
  339. package/src/lib/server/product-card.js.map +1 -0
  340. package/src/lib/server/product.d.ts +70 -0
  341. package/src/lib/server/product.js +105 -0
  342. package/src/lib/server/product.js.map +1 -0
  343. package/src/lib/server/promotion-hold.d.ts +144 -0
  344. package/src/lib/server/promotion-hold.js +174 -0
  345. package/src/lib/server/promotion-hold.js.map +1 -0
  346. package/src/lib/server/reconcile-stock.d.ts +106 -0
  347. package/src/lib/server/reconcile-stock.js +349 -0
  348. package/src/lib/server/reconcile-stock.js.map +1 -0
  349. package/src/lib/server/refund.d.ts +45 -0
  350. package/src/lib/server/refund.js +607 -0
  351. package/src/lib/server/refund.js.map +1 -0
  352. package/src/lib/server/related.d.ts +24 -0
  353. package/src/lib/server/related.js +104 -0
  354. package/src/lib/server/related.js.map +1 -0
  355. package/src/lib/server/reservation-availability.d.ts +23 -0
  356. package/src/lib/server/reservation-availability.js +111 -0
  357. package/src/lib/server/reservation-availability.js.map +1 -0
  358. package/src/lib/server/reserve-stock.d.ts +156 -0
  359. package/src/lib/server/reserve-stock.js +146 -0
  360. package/src/lib/server/reserve-stock.js.map +1 -0
  361. package/src/lib/server/reserve.d.ts +25 -0
  362. package/src/lib/server/reserve.js +426 -0
  363. package/src/lib/server/reserve.js.map +1 -0
  364. package/src/lib/server/restock-flag.d.ts +202 -0
  365. package/src/lib/server/restock-flag.js +449 -0
  366. package/src/lib/server/restock-flag.js.map +1 -0
  367. package/src/lib/server/reviews.d.ts +51 -0
  368. package/src/lib/server/reviews.js +132 -0
  369. package/src/lib/server/reviews.js.map +1 -0
  370. package/src/lib/server/site-page-enricher.d.ts +42 -0
  371. package/src/lib/server/site-page-enricher.js +149 -0
  372. package/src/lib/server/site-page-enricher.js.map +1 -0
  373. package/src/lib/server/site-page-resolver.d.ts +26 -0
  374. package/src/lib/server/site-page-resolver.js +223 -0
  375. package/src/lib/server/site-page-resolver.js.map +1 -0
  376. package/src/lib/server/stock-hold.d.ts +127 -0
  377. package/src/lib/server/stock-hold.js +258 -0
  378. package/src/lib/server/stock-hold.js.map +1 -0
  379. package/src/lib/server/storefront-tax-record.d.ts +22 -0
  380. package/src/lib/server/storefront-tax-record.js +218 -0
  381. package/src/lib/server/storefront-tax-record.js.map +1 -0
  382. package/src/lib/server/storefront-tax.d.ts +197 -0
  383. package/src/lib/server/storefront-tax.js +245 -0
  384. package/src/lib/server/storefront-tax.js.map +1 -0
  385. package/src/lib/server/stream.d.ts +25 -0
  386. package/src/lib/server/stream.js +191 -0
  387. package/src/lib/server/stream.js.map +1 -0
  388. package/src/lib/server/subscription-portal.d.ts +24 -0
  389. package/src/lib/server/subscription-portal.js +91 -0
  390. package/src/lib/server/subscription-portal.js.map +1 -0
  391. package/src/lib/server/supplier-outbox.d.ts +190 -0
  392. package/src/lib/server/supplier-outbox.js +342 -0
  393. package/src/lib/server/supplier-outbox.js.map +1 -0
  394. package/src/lib/server/supplier-update.d.ts +23 -0
  395. package/src/lib/server/supplier-update.js +289 -0
  396. package/src/lib/server/supplier-update.js.map +1 -0
  397. package/src/lib/server/tax-profile.d.ts +29 -0
  398. package/src/lib/server/tax-profile.js +40 -0
  399. package/src/lib/server/tax-profile.js.map +1 -0
  400. package/src/lib/server.d.ts +32 -0
  401. package/src/lib/server.js +311 -0
  402. package/src/lib/server.js.map +1 -0
  403. package/src/lib/site.d.ts +27 -0
  404. package/src/lib/site.js +134 -0
  405. package/src/lib/site.js.map +1 -0
  406. package/src/lib/utils/escape-html.d.ts +41 -0
  407. package/src/lib/utils/escape-html.js +41 -0
  408. package/src/lib/utils/escape-html.js.map +1 -0
  409. package/src/lib/utils/generate-preset-id.d.ts +19 -0
  410. package/src/lib/utils/generate-preset-id.js +25 -0
  411. package/src/lib/utils/generate-preset-id.js.map +1 -0
  412. package/src/lib/utils/member-continue.d.ts +45 -0
  413. package/src/lib/utils/member-continue.js +49 -0
  414. package/src/lib/utils/member-continue.js.map +1 -0
  415. package/src/lib/utils/use-storefront-purchase-event.d.ts +60 -0
  416. package/src/lib/utils/use-storefront-purchase-event.js +142 -0
  417. package/src/lib/utils/use-storefront-purchase-event.js.map +1 -0
@@ -0,0 +1,909 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
+ /**
5
+ * @license
6
+ * Copyright 2026 Aglyn LLC
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */ import * as Aglyn from "@aglyn/aglyn";
20
+ import { mdiMagnify, mdiViewGridOutline } from "@aglyn/shared-data-mdi";
21
+ import Box from "@mui/material/Box";
22
+ import Button from "@mui/material/Button";
23
+ import Card from "@mui/material/Card";
24
+ import CardActionArea from "@mui/material/CardActionArea";
25
+ import CardContent from "@mui/material/CardContent";
26
+ import CardMedia from "@mui/material/CardMedia";
27
+ import Chip from "@mui/material/Chip";
28
+ import InputAdornment from "@mui/material/InputAdornment";
29
+ import MenuItem from "@mui/material/MenuItem";
30
+ import Skeleton from "@mui/material/Skeleton";
31
+ import Slider from "@mui/material/Slider";
32
+ import SvgIcon from "@mui/material/SvgIcon";
33
+ import TextField from "@mui/material/TextField";
34
+ import Typography from "@mui/material/Typography";
35
+ import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
36
+ import { BUNDLE_ID } from "../constants/bundle-common.js";
37
+ import { generatePresetId } from "../utils/generate-preset-id.js";
38
+ // Component ids are persisted in screen documents; never rename.
39
+ export const ID = 'product-grid';
40
+ const SAMPLE_ITEMS = [
41
+ {
42
+ id: 's1',
43
+ name: 'Sample product',
44
+ slug: '#',
45
+ priceUsd: 29,
46
+ maxPriceUsd: 29,
47
+ soldOut: false
48
+ },
49
+ {
50
+ id: 's2',
51
+ name: 'Another product',
52
+ slug: '#',
53
+ priceUsd: 49,
54
+ maxPriceUsd: 59,
55
+ compareAtPriceUsd: 79,
56
+ soldOut: false
57
+ },
58
+ {
59
+ id: 's3',
60
+ name: 'Third product',
61
+ slug: '#',
62
+ priceUsd: 12,
63
+ maxPriceUsd: 12,
64
+ soldOut: true
65
+ }
66
+ ];
67
+ /** Inert chips shown on the besigner canvas when categories are on. */ const SAMPLE_CATEGORIES = [
68
+ {
69
+ id: 'sc1',
70
+ name: 'Apparel',
71
+ slug: 'apparel'
72
+ },
73
+ {
74
+ id: 'sc2',
75
+ name: 'Accessories',
76
+ slug: 'accessories'
77
+ }
78
+ ];
79
+ /** Inert slider bounds on the canvas, matching the sample cards. */ const SAMPLE_PRICE_BOUNDS = {
80
+ minCents: 1200,
81
+ maxCents: 4900
82
+ };
83
+ const TYPE_OPTIONS = [
84
+ {
85
+ value: 'physical',
86
+ label: 'Physical'
87
+ },
88
+ {
89
+ value: 'digital',
90
+ label: 'Digital'
91
+ },
92
+ {
93
+ value: 'service',
94
+ label: 'Services'
95
+ }
96
+ ];
97
+ const SORT_OPTIONS = [
98
+ {
99
+ value: 'newest',
100
+ label: 'Newest'
101
+ },
102
+ {
103
+ value: 'name',
104
+ label: 'Name'
105
+ },
106
+ {
107
+ value: 'price-asc',
108
+ label: 'Price: low to high'
109
+ },
110
+ {
111
+ value: 'price-desc',
112
+ label: 'Price: high to low'
113
+ }
114
+ ];
115
+ function collectionSlugFromLocation() {
116
+ if (typeof window === 'undefined') return '';
117
+ const match = window.location.pathname.match(/\/collections\/([^/?#]+)/);
118
+ return match ? decodeURIComponent(match[1]) : '';
119
+ }
120
+ function priceLabel(item) {
121
+ return item.priceUsd === item.maxPriceUsd ? `$${item.priceUsd}` : `From $${item.priceUsd}`;
122
+ }
123
+ /**
124
+ * Product grid / PLP block (AGL-291): active catalog items from the
125
+ * public listing API, filterable by collection/category/tag, designable
126
+ * in besigner with sample cards (no SiteContext = inert canvas, same
127
+ * convention as the mui Product block). Cards navigate to
128
+ * `/products/{slug}` (PDP routes, AGL-292). Catalog UX (AGL-561):
129
+ * optional debounced search, category chips, type chips, a sort
130
+ * select, and Load more paging — all resolved server-side by the
131
+ * catalog handler so large catalogs stay cheap.
132
+ */ const ProductGrid = /*#__PURE__*/ forwardRef((props, ref)=>{
133
+ var _ref, _ref1, _ref2, _ref3;
134
+ var _site_pageData_commerce_grids, _site_pageData_commerce, _site_pageData;
135
+ const { source, collectionId, collectionSlug: collectionSlugProp, categoryId, categorySlug, tag, sort: sortProp, columns, maxItems, emptyText, showFilters, showSearch, showCategories, showSort, showTypeFilter, showPriceFilter, pageSize } = props, rest = _object_without_properties_loose(props, [
136
+ "source",
137
+ "collectionId",
138
+ "collectionSlug",
139
+ "categoryId",
140
+ "categorySlug",
141
+ "tag",
142
+ "sort",
143
+ "columns",
144
+ "maxItems",
145
+ "emptyText",
146
+ "showFilters",
147
+ "showSearch",
148
+ "showCategories",
149
+ "showSort",
150
+ "showTypeFilter",
151
+ "showPriceFilter",
152
+ "pageSize"
153
+ ]);
154
+ // Node styles ride the renderer-merged sx; recompose (stack.ts pattern).
155
+ const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [
156
+ props['sx']
157
+ ];
158
+ const site = Aglyn.useSite();
159
+ const { hostId } = site;
160
+ // Server-rendered first page (AGL-659). The site-page enricher ran this
161
+ // grid's own query on the server and keyed the result by node id — two
162
+ // grids on a page have different queries, so an unkeyed seed would put
163
+ // the wrong products in one of them. Absent in the besigner and preview,
164
+ // where there is no pageData at all and the effect below still fetches.
165
+ const nodeId = Aglyn.useNodeId();
166
+ const seed = (_site_pageData = site.pageData) == null ? void 0 : (_site_pageData_commerce = _site_pageData.commerce) == null ? void 0 : (_site_pageData_commerce_grids = _site_pageData_commerce.grids) == null ? void 0 : _site_pageData_commerce_grids[nodeId];
167
+ const [items, setItems] = useState((_ref = seed == null ? void 0 : seed.items) != null ? _ref : null);
168
+ const [sort, setSort] = useState(sortProp);
169
+ const [inStockOnly, setInStockOnly] = useState(false);
170
+ const [activeTag, setActiveTag] = useState('');
171
+ // Catalog UX state (AGL-561): the search box debounces into
172
+ // `query`; a chip pick overrides any pinned category ('*' = All);
173
+ // paging appends via `nextOffset` from the catalog handler.
174
+ const [searchInput, setSearchInput] = useState('');
175
+ const [query, setQuery] = useState('');
176
+ const [activeCategoryId, setActiveCategoryId] = useState('');
177
+ const [activeType, setActiveType] = useState('');
178
+ const [categories, setCategories] = useState((_ref1 = seed == null ? void 0 : seed.categories) != null ? _ref1 : []);
179
+ // Price filter (AGL-564): the slider drags into `priceInput` (whole
180
+ // dollars) and debounces into `priceFilter`, which drives the query;
181
+ // null = untouched (no price params sent). Bounds come from the
182
+ // handler's price facets.
183
+ const [priceBounds, setPriceBounds] = useState((_ref2 = seed == null ? void 0 : seed.priceBounds) != null ? _ref2 : null);
184
+ const [priceInput, setPriceInput] = useState(null);
185
+ const [priceFilter, setPriceFilter] = useState(null);
186
+ const [nextOffset, setNextOffset] = useState((_ref3 = seed == null ? void 0 : seed.nextOffset) != null ? _ref3 : null);
187
+ const [loadingMore, setLoadingMore] = useState(false);
188
+ const fetchSeq = useRef(0);
189
+ const collectionSlug = source === 'collection' ? collectionSlugProp || collectionSlugFromLocation() : collectionSlugProp;
190
+ const pageLimit = pageSize && Number(pageSize) > 0 ? Math.floor(Number(pageSize)) : 0;
191
+ const pinnedCategoryId = source === 'category' ? categoryId != null ? categoryId : '' : '';
192
+ // Debounce keystrokes so large catalogs aren't fetched per letter.
193
+ useEffect(()=>{
194
+ const timer = setTimeout(()=>setQuery(searchInput.trim()), 300);
195
+ return ()=>clearTimeout(timer);
196
+ }, [
197
+ searchInput
198
+ ]);
199
+ // Debounce slider drags the same way (AGL-564): one fetch per
200
+ // settled range, not one per pixel of thumb movement.
201
+ useEffect(()=>{
202
+ const timer = setTimeout(()=>setPriceFilter(priceInput), 300);
203
+ return ()=>clearTimeout(timer);
204
+ }, [
205
+ priceInput
206
+ ]);
207
+ const loadPage = useCallback(async (offset)=>{
208
+ if (!hostId) return;
209
+ const seq = ++fetchSeq.current;
210
+ const params = new URLSearchParams({
211
+ hostId
212
+ });
213
+ // Ids first (rename-safe, AGL-343); slugs remain as the legacy path.
214
+ if (source === 'collection') {
215
+ if (collectionId) params.set('collectionId', collectionId);
216
+ else if (collectionSlug) params.set('collection', collectionSlug);
217
+ }
218
+ const effectiveCategoryId = activeCategoryId === '*' ? '' : activeCategoryId || pinnedCategoryId;
219
+ if (effectiveCategoryId) {
220
+ params.set('categoryId', effectiveCategoryId);
221
+ } else if (!activeCategoryId && source === 'category' && categorySlug) {
222
+ params.set('category', categorySlug);
223
+ }
224
+ if (source === 'tag' && tag) params.set('tag', tag);
225
+ if (query) params.set('q', query);
226
+ if (activeType) params.set('type', activeType);
227
+ // Slider dollars → API cents (AGL-564).
228
+ if (priceFilter) {
229
+ params.set('minPriceCents', String(priceFilter[0] * 100));
230
+ params.set('maxPriceCents', String(priceFilter[1] * 100));
231
+ }
232
+ if (sort) params.set('sort', sort);
233
+ const limit = pageLimit || maxItems;
234
+ if (limit) params.set('limit', String(limit));
235
+ if (offset) params.set('offset', String(offset));
236
+ if ((showCategories || showPriceFilter) && offset === 0) {
237
+ params.set('facets', '1');
238
+ }
239
+ try {
240
+ var _ref;
241
+ const response = await fetch(`/api/commerce/catalog?${params.toString()}`);
242
+ const payload = await response.json();
243
+ if (seq !== fetchSeq.current) return;
244
+ const pageItems = (_ref = payload == null ? void 0 : payload.items) != null ? _ref : [];
245
+ setItems((prev)=>offset && prev ? [
246
+ ...prev,
247
+ ...pageItems
248
+ ] : pageItems);
249
+ setNextOffset(typeof (payload == null ? void 0 : payload.nextOffset) === 'number' ? payload.nextOffset : null);
250
+ if (Array.isArray(payload == null ? void 0 : payload.categories)) {
251
+ setCategories(payload.categories);
252
+ }
253
+ const bounds = payload == null ? void 0 : payload.priceBounds;
254
+ if (typeof (bounds == null ? void 0 : bounds.minCents) === 'number' && typeof (bounds == null ? void 0 : bounds.maxCents) === 'number') {
255
+ setPriceBounds(bounds);
256
+ }
257
+ } catch (unused) {
258
+ if (seq !== fetchSeq.current) return;
259
+ if (!offset) setItems([]);
260
+ setNextOffset(null);
261
+ }
262
+ }, [
263
+ hostId,
264
+ source,
265
+ collectionId,
266
+ collectionSlug,
267
+ categorySlug,
268
+ tag,
269
+ sort,
270
+ maxItems,
271
+ query,
272
+ activeCategoryId,
273
+ activeType,
274
+ priceFilter,
275
+ pageLimit,
276
+ pinnedCategoryId,
277
+ showCategories,
278
+ showPriceFilter
279
+ ]);
280
+ // A seeded grid already holds exactly what `loadPage(0)` would return,
281
+ // so the first pass skips the fetch (AGL-659) — every later run, after
282
+ // a filter or sort change, goes to the API as before.
283
+ const seededRef = useRef(Boolean(seed));
284
+ useEffect(()=>{
285
+ if (!hostId) return;
286
+ if (seededRef.current) {
287
+ seededRef.current = false;
288
+ return;
289
+ }
290
+ void loadPage(0);
291
+ // Invalidate any in-flight request on dep change or unmount.
292
+ return ()=>{
293
+ fetchSeq.current++;
294
+ };
295
+ }, [
296
+ hostId,
297
+ loadPage
298
+ ]);
299
+ const desktopColumns = Math.min(6, Math.max(1, columns != null ? columns : 3));
300
+ const gridSx = {
301
+ display: 'grid',
302
+ gap: 2,
303
+ gridTemplateColumns: {
304
+ xs: 'repeat(1, 1fr)',
305
+ sm: 'repeat(2, 1fr)',
306
+ md: `repeat(${desktopColumns}, 1fr)`
307
+ }
308
+ };
309
+ let visible = hostId ? items : SAMPLE_ITEMS;
310
+ if (visible && showFilters) {
311
+ if (inStockOnly) visible = visible.filter((item)=>!item.soldOut);
312
+ if (activeTag) {
313
+ visible = visible.filter((item)=>{
314
+ var _item_tags;
315
+ return ((_item_tags = item.tags) != null ? _item_tags : []).includes(activeTag);
316
+ });
317
+ }
318
+ }
319
+ const facetTags = showFilters ? [
320
+ ...new Set((items != null ? items : []).flatMap((item)=>{
321
+ var _item_tags;
322
+ return (_item_tags = item.tags) != null ? _item_tags : [];
323
+ }))
324
+ ].slice(0, 12) : [];
325
+ if (hostId && items === null) {
326
+ return(// MERGE, never replace (AGL-1450). The skeleton branch replaced the
327
+ // node's sx outright, so an authored grid flashed unstyled for as
328
+ // long as the first fetch took and then snapped into place.
329
+ /*#__PURE__*/ _jsx(Box, _extends({
330
+ ref: ref
331
+ }, rest, {
332
+ sx: [
333
+ gridSx,
334
+ ...nodeSx
335
+ ],
336
+ children: Array.from({
337
+ length: desktopColumns
338
+ }, (_item, index)=>/*#__PURE__*/ _jsxs(Card, {
339
+ variant: "outlined",
340
+ children: [
341
+ /*#__PURE__*/ _jsx(Skeleton, {
342
+ variant: "rectangular",
343
+ height: 160
344
+ }),
345
+ /*#__PURE__*/ _jsxs(CardContent, {
346
+ children: [
347
+ /*#__PURE__*/ _jsx(Skeleton, {
348
+ width: "70%"
349
+ }),
350
+ /*#__PURE__*/ _jsx(Skeleton, {
351
+ width: "30%"
352
+ })
353
+ ]
354
+ })
355
+ ]
356
+ }, index))
357
+ })));
358
+ }
359
+ // Catalog controls (AGL-561): search on top, category/type chips
360
+ // under it with the sort select right-aligned — the layout every
361
+ // mainstream commerce PLP uses. Server-side; sample data inert.
362
+ const chipCategories = categories.length ? categories : !hostId && showCategories ? SAMPLE_CATEGORIES : [];
363
+ const selectedCategoryId = activeCategoryId === '*' ? '' : activeCategoryId || pinnedCategoryId;
364
+ const hasCatalogControls = Boolean(showSearch || showCategories || showSort || showTypeFilter || showPriceFilter);
365
+ // Price slider bounds (AGL-564), widened to whole dollars so both
366
+ // ends stay reachable; sample bounds keep the canvas designable.
367
+ const sliderBounds = hostId ? priceBounds : SAMPLE_PRICE_BOUNDS;
368
+ const sliderMin = sliderBounds ? Math.floor(sliderBounds.minCents / 100) : 0;
369
+ const sliderMax = sliderBounds ? Math.ceil(sliderBounds.maxCents / 100) : 0;
370
+ const showSlider = Boolean(showPriceFilter && sliderMin < sliderMax);
371
+ const controls = hasCatalogControls ? /*#__PURE__*/ _jsxs(Box, {
372
+ sx: {
373
+ display: 'flex',
374
+ flexDirection: 'column',
375
+ gap: 1.5,
376
+ mb: 2
377
+ },
378
+ children: [
379
+ showSearch ? /*#__PURE__*/ _jsx(TextField, {
380
+ value: searchInput,
381
+ onChange: (event)=>setSearchInput(event.target.value),
382
+ placeholder: "Search products…",
383
+ size: "small",
384
+ fullWidth: true,
385
+ slotProps: {
386
+ input: {
387
+ startAdornment: /*#__PURE__*/ _jsx(InputAdornment, {
388
+ position: "start",
389
+ children: /*#__PURE__*/ _jsx(SvgIcon, {
390
+ fontSize: "small",
391
+ color: "disabled",
392
+ children: /*#__PURE__*/ _jsx("path", {
393
+ d: mdiMagnify.path
394
+ })
395
+ })
396
+ })
397
+ },
398
+ htmlInput: {
399
+ 'aria-label': 'Search products',
400
+ type: 'search'
401
+ }
402
+ }
403
+ }) : null,
404
+ showCategories || showTypeFilter || showSort ? /*#__PURE__*/ _jsxs(Box, {
405
+ sx: {
406
+ display: 'flex',
407
+ gap: 1,
408
+ flexWrap: 'wrap',
409
+ alignItems: 'center'
410
+ },
411
+ children: [
412
+ showCategories && chipCategories.length ? /*#__PURE__*/ _jsxs(_Fragment, {
413
+ children: [
414
+ /*#__PURE__*/ _jsx(Chip, {
415
+ label: "All",
416
+ size: "small",
417
+ variant: selectedCategoryId ? 'outlined' : 'filled',
418
+ color: selectedCategoryId ? 'default' : 'primary',
419
+ onClick: ()=>setActiveCategoryId('*')
420
+ }),
421
+ chipCategories.map((category)=>/*#__PURE__*/ _jsx(Chip, {
422
+ label: category.name,
423
+ size: "small",
424
+ variant: selectedCategoryId === category.id ? 'filled' : 'outlined',
425
+ color: selectedCategoryId === category.id ? 'secondary' : 'default',
426
+ onClick: ()=>setActiveCategoryId((prev)=>(prev || pinnedCategoryId) === category.id ? '*' : category.id)
427
+ }, category.id))
428
+ ]
429
+ }) : null,
430
+ showTypeFilter ? TYPE_OPTIONS.map((option)=>/*#__PURE__*/ _jsx(Chip, {
431
+ label: option.label,
432
+ size: "small",
433
+ variant: activeType === option.value ? 'filled' : 'outlined',
434
+ color: activeType === option.value ? 'secondary' : 'default',
435
+ onClick: ()=>setActiveType((prev)=>prev === option.value ? '' : option.value)
436
+ }, option.value)) : null,
437
+ showSort ? /*#__PURE__*/ _jsxs(_Fragment, {
438
+ children: [
439
+ /*#__PURE__*/ _jsx(Box, {
440
+ sx: {
441
+ flex: 1
442
+ }
443
+ }),
444
+ /*#__PURE__*/ _jsx(TextField, {
445
+ select: true,
446
+ size: "small",
447
+ value: SORT_OPTIONS.some((option)=>option.value === sort) ? sort : 'name',
448
+ onChange: (event)=>setSort(event.target.value),
449
+ sx: {
450
+ minWidth: 180
451
+ },
452
+ slotProps: {
453
+ htmlInput: {
454
+ 'aria-label': 'Sort products'
455
+ }
456
+ },
457
+ children: SORT_OPTIONS.map((option)=>/*#__PURE__*/ _jsx(MenuItem, {
458
+ value: option.value,
459
+ children: option.label
460
+ }, option.value))
461
+ })
462
+ ]
463
+ }) : null
464
+ ]
465
+ }) : null,
466
+ showSlider ? /*#__PURE__*/ _jsxs(Box, {
467
+ sx: {
468
+ display: 'flex',
469
+ alignItems: 'center',
470
+ gap: 1.5,
471
+ maxWidth: 360,
472
+ px: 1
473
+ },
474
+ children: [
475
+ /*#__PURE__*/ _jsx(Typography, {
476
+ variant: "caption",
477
+ color: "text.secondary",
478
+ sx: {
479
+ whiteSpace: 'nowrap'
480
+ },
481
+ children: `$${sliderMin}`
482
+ }),
483
+ /*#__PURE__*/ _jsx(Slider, {
484
+ size: "small",
485
+ value: priceInput != null ? priceInput : [
486
+ sliderMin,
487
+ sliderMax
488
+ ],
489
+ min: sliderMin,
490
+ max: sliderMax,
491
+ step: 1,
492
+ disableSwap: true,
493
+ disabled: !hostId,
494
+ onChange: (_event, value)=>setPriceInput(Array.isArray(value) ? value : [
495
+ value,
496
+ value
497
+ ]),
498
+ valueLabelDisplay: "auto",
499
+ valueLabelFormat: (value)=>`$${value}`,
500
+ getAriaLabel: (index)=>index === 0 ? 'Minimum price' : 'Maximum price'
501
+ }),
502
+ /*#__PURE__*/ _jsx(Typography, {
503
+ variant: "caption",
504
+ color: "text.secondary",
505
+ sx: {
506
+ whiteSpace: 'nowrap'
507
+ },
508
+ children: `$${sliderMax}`
509
+ })
510
+ ]
511
+ }) : null
512
+ ]
513
+ }) : null;
514
+ if (visible && visible.length === 0 && !hasCatalogControls) {
515
+ return /*#__PURE__*/ _jsx(Box, _extends({
516
+ ref: ref
517
+ }, rest, {
518
+ sx: [
519
+ {
520
+ p: 3,
521
+ textAlign: 'center'
522
+ },
523
+ ...nodeSx
524
+ ],
525
+ children: /*#__PURE__*/ _jsx(Typography, {
526
+ variant: "body2",
527
+ color: "text.secondary",
528
+ children: emptyText || 'No products here yet — check back soon.'
529
+ })
530
+ }));
531
+ }
532
+ // With controls visible the empty state renders inline, so a
533
+ // no-result search still leaves the box available to clear.
534
+ const emptyState = /*#__PURE__*/ _jsx(Box, {
535
+ sx: {
536
+ p: 3,
537
+ textAlign: 'center'
538
+ },
539
+ children: /*#__PURE__*/ _jsx(Typography, {
540
+ variant: "body2",
541
+ color: "text.secondary",
542
+ children: query || activeType || selectedCategoryId || priceFilter ? 'No products match — try clearing a filter.' : emptyText || 'No products here yet — check back soon.'
543
+ })
544
+ });
545
+ const loadMore = hostId && pageLimit && nextOffset != null ? /*#__PURE__*/ _jsx(Box, {
546
+ sx: {
547
+ display: 'flex',
548
+ justifyContent: 'center',
549
+ mt: 3
550
+ },
551
+ children: /*#__PURE__*/ _jsx(Button, {
552
+ variant: "outlined",
553
+ disabled: loadingMore,
554
+ onClick: async ()=>{
555
+ if (nextOffset == null || loadingMore) return;
556
+ setLoadingMore(true);
557
+ await loadPage(nextOffset);
558
+ setLoadingMore(false);
559
+ },
560
+ children: loadingMore ? 'Loading…' : 'Load more'
561
+ })
562
+ }) : null;
563
+ const grid = /*#__PURE__*/ _jsx(Box, {
564
+ sx: gridSx,
565
+ children: (visible != null ? visible : []).map((item)=>{
566
+ // AGL-1726: resolved BEFORE the guard, so a stored value that is
567
+ // truthy but resolves to nothing renders the placeholder rather
568
+ // than an `<img>` with no `src`.
569
+ const imageUrl = Aglyn.siteRelativeMediaSrc(item.imageUrl, {
570
+ hostId
571
+ });
572
+ return /*#__PURE__*/ _jsx(Card, {
573
+ variant: "outlined",
574
+ children: /*#__PURE__*/ _jsxs(CardActionArea, {
575
+ href: hostId ? `/products/${item.slug}` : undefined,
576
+ disabled: !hostId,
577
+ children: [
578
+ imageUrl ? /*#__PURE__*/ _jsx(CardMedia, _extends({
579
+ component: "img",
580
+ image: imageUrl,
581
+ alt: item.name,
582
+ sx: {
583
+ height: 160,
584
+ objectFit: 'cover'
585
+ }
586
+ }, Aglyn.DEFERRED_IMAGE_ATTRIBUTES)) : /*#__PURE__*/ _jsx(Box, {
587
+ sx: {
588
+ height: 160,
589
+ bgcolor: 'action.hover'
590
+ }
591
+ }),
592
+ /*#__PURE__*/ _jsxs(CardContent, {
593
+ children: [
594
+ /*#__PURE__*/ _jsx(Typography, {
595
+ variant: "subtitle2",
596
+ noWrap: true,
597
+ children: item.name
598
+ }),
599
+ /*#__PURE__*/ _jsxs(Box, {
600
+ sx: {
601
+ display: 'flex',
602
+ gap: 1,
603
+ alignItems: 'center'
604
+ },
605
+ children: [
606
+ /*#__PURE__*/ _jsx(Typography, {
607
+ variant: "body2",
608
+ color: "text.secondary",
609
+ children: priceLabel(item)
610
+ }),
611
+ item.compareAtPriceUsd ? /*#__PURE__*/ _jsx(Typography, {
612
+ variant: "caption",
613
+ color: "text.disabled",
614
+ sx: {
615
+ textDecoration: 'line-through'
616
+ },
617
+ children: `$${item.compareAtPriceUsd}`
618
+ }) : null,
619
+ item.soldOut ? /*#__PURE__*/ _jsx(Chip, {
620
+ label: "Sold out",
621
+ size: "small",
622
+ variant: "outlined"
623
+ }) : null
624
+ ]
625
+ })
626
+ ]
627
+ })
628
+ ]
629
+ })
630
+ }, item.id);
631
+ })
632
+ });
633
+ const body = visible && visible.length === 0 ? emptyState : grid;
634
+ if (!showFilters) {
635
+ return /*#__PURE__*/ _jsxs(Box, _extends({
636
+ ref: ref
637
+ }, rest, {
638
+ children: [
639
+ controls,
640
+ body,
641
+ loadMore
642
+ ]
643
+ }));
644
+ }
645
+ return /*#__PURE__*/ _jsxs(Box, _extends({
646
+ ref: ref
647
+ }, rest, {
648
+ children: [
649
+ controls,
650
+ /*#__PURE__*/ _jsxs(Box, {
651
+ sx: {
652
+ display: 'flex',
653
+ gap: 1,
654
+ flexWrap: 'wrap',
655
+ alignItems: 'center',
656
+ mb: 2
657
+ },
658
+ children: [
659
+ /*#__PURE__*/ _jsx(Chip, {
660
+ label: "In stock",
661
+ size: "small",
662
+ variant: inStockOnly ? 'filled' : 'outlined',
663
+ color: inStockOnly ? 'primary' : 'default',
664
+ onClick: ()=>setInStockOnly((prev)=>!prev)
665
+ }),
666
+ facetTags.map((facetTag)=>/*#__PURE__*/ _jsx(Chip, {
667
+ label: facetTag,
668
+ size: "small",
669
+ variant: activeTag === facetTag ? 'filled' : 'outlined',
670
+ color: activeTag === facetTag ? 'primary' : 'default',
671
+ onClick: ()=>setActiveTag((prev)=>prev === facetTag ? '' : facetTag)
672
+ }, facetTag)),
673
+ /*#__PURE__*/ _jsx(Box, {
674
+ sx: {
675
+ flex: 1
676
+ }
677
+ }),
678
+ /*#__PURE__*/ _jsx(Chip, {
679
+ label: sort === 'price-asc' ? 'Price ↑' : sort === 'price-desc' ? 'Price ↓' : 'A–Z',
680
+ size: "small",
681
+ variant: "outlined",
682
+ onClick: ()=>setSort((prev)=>prev === 'price-asc' ? 'price-desc' : prev === 'price-desc' ? 'name' : 'price-asc')
683
+ })
684
+ ]
685
+ }),
686
+ body,
687
+ loadMore
688
+ ]
689
+ }));
690
+ });
691
+ ProductGrid.displayName = 'AglynProductGrid';
692
+ export const schema = {
693
+ $id: ID,
694
+ pluginId: BUNDLE_ID,
695
+ displayName: 'Product grid',
696
+ description: 'Your catalog as a grid, with optional search, category chips, sort and paging.',
697
+ category: Aglyn.ComponentCategory.COMMERCE,
698
+ icon: {
699
+ path: mdiViewGridOutline.path,
700
+ sx: {
701
+ color: '#2e7d32'
702
+ }
703
+ },
704
+ flags: {
705
+ selfClosing: Aglyn.FEATURE_FLAG.ENABLED
706
+ },
707
+ attributes: [
708
+ {
709
+ name: 'source',
710
+ label: 'Show',
711
+ description: 'Which products to list.',
712
+ component: Aglyn.FieldComponentType.SELECT,
713
+ options: [
714
+ {
715
+ label: 'All products',
716
+ value: 'all'
717
+ },
718
+ {
719
+ label: 'A collection',
720
+ value: 'collection'
721
+ },
722
+ {
723
+ label: 'A category',
724
+ value: 'category'
725
+ },
726
+ {
727
+ label: 'A tag',
728
+ value: 'tag'
729
+ }
730
+ ]
731
+ },
732
+ {
733
+ name: 'collectionId',
734
+ label: 'Collection',
735
+ description: 'Pick the collection — stored by id, so renaming it never breaks ' + 'this grid. Leave empty on collection template screens to follow ' + 'the /collections/{slug} URL.',
736
+ component: Aglyn.FieldComponentType.COLLECTION_SELECT
737
+ },
738
+ {
739
+ name: 'collectionSlug',
740
+ label: 'Collection slug (legacy)',
741
+ description: 'Used only when no collection is picked above.',
742
+ component: Aglyn.FieldComponentType.TEXT_FIELD
743
+ },
744
+ {
745
+ name: 'categoryId',
746
+ label: 'Category',
747
+ description: 'Pick the category — stored by id, rename-safe.',
748
+ component: Aglyn.FieldComponentType.CATEGORY_SELECT
749
+ },
750
+ {
751
+ name: 'categorySlug',
752
+ label: 'Category slug (legacy)',
753
+ description: 'Used only when no category is picked above.',
754
+ component: Aglyn.FieldComponentType.TEXT_FIELD
755
+ },
756
+ {
757
+ name: 'tag',
758
+ label: 'Tag',
759
+ description: 'Products tagged with this value.',
760
+ component: Aglyn.FieldComponentType.TEXT_FIELD
761
+ },
762
+ {
763
+ name: 'sort',
764
+ label: 'Sort',
765
+ description: 'Listing order.',
766
+ component: Aglyn.FieldComponentType.SELECT,
767
+ options: [
768
+ {
769
+ label: 'Name',
770
+ value: 'name'
771
+ },
772
+ {
773
+ label: 'Price (low → high)',
774
+ value: 'price-asc'
775
+ },
776
+ {
777
+ label: 'Price (high → low)',
778
+ value: 'price-desc'
779
+ },
780
+ {
781
+ label: 'Newest',
782
+ value: 'newest'
783
+ }
784
+ ]
785
+ },
786
+ {
787
+ name: 'columns',
788
+ label: 'Columns',
789
+ description: 'Desktop columns (1-6).',
790
+ component: Aglyn.FieldComponentType.TEXT_FIELD,
791
+ type: 'number'
792
+ },
793
+ {
794
+ name: 'maxItems',
795
+ label: 'Max items',
796
+ description: 'Cap the number of cards.',
797
+ component: Aglyn.FieldComponentType.TEXT_FIELD,
798
+ type: 'number'
799
+ },
800
+ {
801
+ name: 'emptyText',
802
+ label: 'Empty text',
803
+ description: 'Copy when nothing matches.',
804
+ component: Aglyn.FieldComponentType.TEXT_FIELD
805
+ },
806
+ {
807
+ name: 'showFilters',
808
+ label: 'Show filters',
809
+ description: 'Tag chips, in-stock toggle, and price sort above the grid.',
810
+ component: Aglyn.FieldComponentType.CHECKBOX
811
+ },
812
+ {
813
+ name: 'showSearch',
814
+ label: 'Search box',
815
+ description: 'Visitor search box above the grid — matches product names, ' + 'descriptions, and tags (server-side).',
816
+ component: Aglyn.FieldComponentType.CHECKBOX
817
+ },
818
+ {
819
+ name: 'showCategories',
820
+ label: 'Category chips',
821
+ description: 'Filter chips built from your product categories, with an All chip.',
822
+ component: Aglyn.FieldComponentType.CHECKBOX
823
+ },
824
+ {
825
+ name: 'showSort',
826
+ label: 'Sort select',
827
+ description: 'Visitor sort: newest, name, price low→high, price high→low.',
828
+ component: Aglyn.FieldComponentType.CHECKBOX
829
+ },
830
+ {
831
+ name: 'showTypeFilter',
832
+ label: 'Type filter',
833
+ description: 'Physical / digital / services chips.',
834
+ component: Aglyn.FieldComponentType.CHECKBOX
835
+ },
836
+ {
837
+ name: 'showPriceFilter',
838
+ label: 'Price filter',
839
+ description: 'Price range slider between your lowest and highest product prices.',
840
+ component: Aglyn.FieldComponentType.CHECKBOX
841
+ },
842
+ {
843
+ name: 'pageSize',
844
+ label: 'Page size',
845
+ description: 'Products per page with a Load more button; blank loads once ' + '(capped by Max items).',
846
+ component: Aglyn.FieldComponentType.TEXT_FIELD,
847
+ type: 'number'
848
+ }
849
+ ]
850
+ };
851
+ export const presets = [
852
+ {
853
+ $id: generatePresetId(ID),
854
+ type: Aglyn.NodeType.PRESET,
855
+ displayName: 'Product grid',
856
+ pluginId: BUNDLE_ID,
857
+ description: 'Responsive grid of catalog products',
858
+ category: Aglyn.ComponentCategory.COMMERCE,
859
+ icon: {
860
+ path: mdiViewGridOutline.path,
861
+ sx: {
862
+ color: '#2e7d32'
863
+ }
864
+ },
865
+ data: {
866
+ $id: null,
867
+ componentId: ID,
868
+ pluginId: BUNDLE_ID,
869
+ props: {
870
+ source: 'all',
871
+ sort: 'name',
872
+ columns: 3
873
+ }
874
+ }
875
+ },
876
+ {
877
+ // Full shop page (AGL-561): the grid with every catalog control on
878
+ // — search, category chips, sort, and Load more paging.
879
+ $id: generatePresetId(ID, 'shop'),
880
+ type: Aglyn.NodeType.PRESET,
881
+ displayName: 'Shop catalog',
882
+ pluginId: BUNDLE_ID,
883
+ description: 'Product grid with search, category chips, sort, and paging',
884
+ category: Aglyn.ComponentCategory.COMMERCE,
885
+ icon: {
886
+ path: mdiViewGridOutline.path,
887
+ sx: {
888
+ color: '#2e7d32'
889
+ }
890
+ },
891
+ data: {
892
+ $id: null,
893
+ componentId: ID,
894
+ pluginId: BUNDLE_ID,
895
+ props: {
896
+ source: 'all',
897
+ sort: 'newest',
898
+ columns: 3,
899
+ showSearch: true,
900
+ showCategories: true,
901
+ showSort: true,
902
+ pageSize: 12
903
+ }
904
+ }
905
+ }
906
+ ];
907
+ export default ProductGrid;
908
+
909
+ //# sourceMappingURL=product-grid.js.map