@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,861 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ 'use client';
17
+ import { _ as _extends } from "@swc/helpers/_/_extends";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ import * as CommerceModel from "../../model/index.js";
20
+ import { CardDisplay } from "@aglyn/shared-ui-jsx";
21
+ import { ScrollTable } from "@aglyn/shared-ui-jsx/components/scroll-table.component";
22
+ import { useSnackbar } from "@aglyn/shared-ui-snackstack";
23
+ import { checkEntitlement, ORDERS_CUSTOMER_PARAM, ORDERS_ORDER_PARAM, pluginDocsHelp } from "@aglyn/aglyn";
24
+ import { Alert, AlertTitle, Button, Chip, Dialog, DialogActions, DialogContent, DialogTitle, MenuItem, Stack, TableBody, TableCell, TableHead, TableRow, TextField, Tooltip, Typography } from "@mui/material";
25
+ import { collection, doc, getDoc, limit, orderBy, query } from "firebase/firestore";
26
+ import { useSearchParams } from "next/navigation";
27
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
28
+ import { ceilingedWindow, collectionCeiling, useFirestore, useOrgPlan, useUser } from "@aglyn/tenant-feature-instance";
29
+ import { useFirestoreCollection } from "@aglyn/tenant-feature-instance";
30
+ import { authorizedFetch } from "@aglyn/shared-util-http/authorized-token";
31
+ import CommerceStatTile from "./commerce-stat-tile.component.js";
32
+ import OrderDetailDialog, { DISPUTE_COLOR } from "./order-detail-dialog.component.js";
33
+ /**
34
+ * How far back the table, its filters and its export reach.
35
+ *
36
+ * This window cannot be paged the way a plain list can. Five filters and the
37
+ * CSV export all run over what was read, so a page of ten would quietly narrow
38
+ * every one of them — a status filter would search a tenth of the orders and
39
+ * report confidently on what it found. Bounding the read and saying where the
40
+ * bound falls keeps the filters honest about their own scope.
41
+ */ const ORDERS_WINDOW = 200;
42
+ /** A name map for the filter menu; it renders no product rows of its own. */ const PRODUCT_NAME_WINDOW = 100;
43
+ /**
44
+ * Orders console (AGL-287): filterable list over webhook-written order
45
+ * docs with a detail dialog (timeline, fulfill, refund, cancel, notes,
46
+ * packing slip) and draft orders that send the buyer a payment link.
47
+ */ export function HostOrdersCard(props) {
48
+ var _ref, _find, _ref1, _ref2, _ref3, _ref4;
49
+ var _draft_shipCountries, _draft_shipCountries1;
50
+ const { hostId } = props;
51
+ const firestore = useFirestore();
52
+ /**
53
+ * The most recent orders, in the order the table shows them.
54
+ *
55
+ * `createdAtMs` is the field every order writer in the plugin stamps and the
56
+ * one `reconcile-stock` already walks the collection by. Ordering on it is
57
+ * what makes this window the RECENT orders: an unordered cap is answered in
58
+ * document-id order, and orders are keyed by generated ids, so it returns a
59
+ * pseudo-random sample that a client sort then dresses as newest-first.
60
+ */ const { data: orderDocs } = useFirestoreCollection(()=>query(collection(firestore, 'hosts', hostId, 'orders'), orderBy('createdAtMs', 'desc'), limit(ORDERS_WINDOW + 1)), [
61
+ firestore,
62
+ hostId
63
+ ], {
64
+ idField: '$id'
65
+ });
66
+ const { data: productDocs } = useFirestoreCollection(()=>collectionCeiling(collection(firestore, 'hosts', hostId, 'products'), PRODUCT_NAME_WINDOW), [
67
+ firestore,
68
+ hostId
69
+ ], {
70
+ idField: '$id'
71
+ });
72
+ const orderWindow = useMemo(()=>ceilingedWindow(orderDocs != null ? orderDocs : undefined, ORDERS_WINDOW), [
73
+ orderDocs
74
+ ]);
75
+ const productWindow = useMemo(()=>ceilingedWindow(productDocs != null ? productDocs : undefined, PRODUCT_NAME_WINDOW), [
76
+ productDocs
77
+ ]);
78
+ const productNames = useMemo(()=>{
79
+ const map = {};
80
+ for (const product of productWindow.rows){
81
+ var _product_name;
82
+ map[product.$id] = (_product_name = product.name) != null ? _product_name : product.$id;
83
+ }
84
+ return map;
85
+ }, [
86
+ productWindow
87
+ ]);
88
+ /**
89
+ * The money tiles are the `commerceAnalytics` surface (AGL-1938,
90
+ * AGL-2056), and this is the third place they appear. Rendering them
91
+ * ungated here would undo both of those passes and hand a Starter org
92
+ * the Pro figures one tab away from the upgrade prompt that refuses
93
+ * them. The TABLE below is not gated — a list of your own orders is not
94
+ * a paid feature.
95
+ */ const { org, ready: orgReady } = useOrgPlan(hostId);
96
+ const showStats = orgReady && checkEntitlement(org, 'commerceAnalytics');
97
+ // The query returns the window already newest-first; re-sorting it here
98
+ // would only restate the order it arrived in.
99
+ const orders = orderWindow.rows;
100
+ // Filters + CSV export (AGL-96) over the loaded window.
101
+ const [productFilter, setProductFilter] = useState('');
102
+ const [dateFilter, setDateFilter] = useState('');
103
+ const [statusFilter, setStatusFilter] = useState('');
104
+ const [channelFilter, setChannelFilter] = useState('');
105
+ /**
106
+ * Disputes filter (AGL-1796), separate from Status on purpose: the two are
107
+ * orthogonal. An OPEN dispute sits on an order that is still `paid`, and a
108
+ * lost one sits on `refunded` beside every ordinary refund — so folding
109
+ * either into the Status select would make that control lie about what it
110
+ * selects.
111
+ */ const [disputeFilter, setDisputeFilter] = useState('');
112
+ /*
113
+ * Customer filter (AGL-2622): the buyer's address, matched as a substring
114
+ * of `customerEmail` so a domain finds every buyer at a company. Seeded
115
+ * from the URL, because the CRM's contact page links here with the
116
+ * person's address to answer "what has this customer ordered" — the
117
+ * orders count on the record is the number, and this list is the rows.
118
+ */ const searchParams = useSearchParams();
119
+ const [customerFilter, setCustomerFilter] = useState(()=>{
120
+ var _ref;
121
+ return (_ref = searchParams == null ? void 0 : searchParams.get(ORDERS_CUSTOMER_PARAM)) != null ? _ref : '';
122
+ });
123
+ const [selectedId, setSelectedId] = useState(null);
124
+ /*
125
+ * An order named in the URL opens in its dialog on arrival (AGL-2622). A
126
+ * contact's timeline names the order that made the person a customer,
127
+ * and the address it links to is this list with `?order={id}`. The
128
+ * window is the newest two hundred, and an order from last year is not
129
+ * in it, so the document is read once by id and held beside the window
130
+ * for the dialog; an order that IS in the window is found there first
131
+ * and the read is skipped. Once per id — the ref keeps a re-render from
132
+ * reopening a dialog the merchant has since closed — and the landing read
133
+ * is judged against the ref rather than an effect cleanup, because the
134
+ * `setSelectedId` above re-renders before the read lands and a cleanup
135
+ * keyed on any dep would cancel the answer to the question just asked.
136
+ */ const seededOrderId = (_ref = searchParams == null ? void 0 : searchParams.get(ORDERS_ORDER_PARAM)) != null ? _ref : null;
137
+ const [seededOrder, setSeededOrder] = useState(null);
138
+ const seededOpened = useRef(null);
139
+ useEffect(()=>{
140
+ if (!seededOrderId || seededOpened.current === seededOrderId) return;
141
+ if (orderDocs === undefined) return;
142
+ seededOpened.current = seededOrderId;
143
+ setSelectedId(seededOrderId);
144
+ if (orderDocs.some((order)=>order.$id === seededOrderId)) return;
145
+ void getDoc(doc(firestore, 'hosts', hostId, 'orders', seededOrderId)).then((snapshot)=>{
146
+ if (seededOpened.current !== snapshot.id || !snapshot.exists()) return;
147
+ setSeededOrder(_extends({}, snapshot.data(), {
148
+ $id: snapshot.id
149
+ }));
150
+ }).catch(()=>undefined);
151
+ }, [
152
+ seededOrderId,
153
+ orderDocs,
154
+ firestore,
155
+ hostId
156
+ ]);
157
+ const [draft, setDraft] = useState(null);
158
+ const { data: user } = useUser();
159
+ const { enqueueSnackbar } = useSnackbar();
160
+ const visibleOrders = useMemo(()=>{
161
+ const now = Date.now() / 1000;
162
+ return orders.filter((order)=>{
163
+ var _order_customerEmail, _lifted_channel, _order_createdAtMs;
164
+ var _CommerceModel_describeOrderDispute;
165
+ const lifted = CommerceModel.liftLegacyOrder(order);
166
+ // Line items first (AGL-1747): the flat `productId` is written only by
167
+ // the two buy-now Stripe paths, so matching on it alone hid every cart,
168
+ // POS and draft order behind the product filter.
169
+ if (productFilter && !CommerceModel.orderContainsProduct(lifted, productFilter)) {
170
+ return false;
171
+ }
172
+ if (statusFilter && lifted.status !== statusFilter) return false;
173
+ if (customerFilter && !String((_order_customerEmail = order.customerEmail) != null ? _order_customerEmail : '').toLowerCase().includes(customerFilter.trim().toLowerCase())) {
174
+ return false;
175
+ }
176
+ if (channelFilter && ((_lifted_channel = lifted.channel) != null ? _lifted_channel : 'online') !== channelFilter) {
177
+ return false;
178
+ }
179
+ if (disputeFilter === 'open' && !CommerceModel.orderHasOpenDispute(lifted)) {
180
+ return false;
181
+ }
182
+ // `lost` is the tone, not the raw status: a dispute that was WON also
183
+ // closes with money untouched, and listing it under "charged back"
184
+ // would tell a merchant they lost a case they won.
185
+ if (disputeFilter === 'lost' && ((_CommerceModel_describeOrderDispute = CommerceModel.describeOrderDispute(lifted)) == null ? void 0 : _CommerceModel_describeOrderDispute.tone) !== 'lost') {
186
+ return false;
187
+ }
188
+ // The same field the query orders by. `createdAt` is not universal
189
+ // across order writers, and a row missing it read as epoch zero — which
190
+ // both date filters excluded outright.
191
+ const created = ((_order_createdAtMs = order.createdAtMs) != null ? _order_createdAtMs : 0) / 1000;
192
+ if (dateFilter === '7d' && now - created > 7 * 86400) return false;
193
+ if (dateFilter === '30d' && now - created > 30 * 86400) return false;
194
+ return true;
195
+ });
196
+ }, [
197
+ orders,
198
+ productFilter,
199
+ dateFilter,
200
+ statusFilter,
201
+ channelFilter,
202
+ disputeFilter,
203
+ customerFilter
204
+ ]);
205
+ /**
206
+ * Raised over EVERY loaded order, not the visible ones (AGL-1796). A
207
+ * merchant filtered to "delivered" still has a deadline running on a `paid`
208
+ * order, and the evidence window is days long.
209
+ */ const openDisputes = useMemo(()=>CommerceModel.summariseOpenDisputes(orders.map((order)=>CommerceModel.liftLegacyOrder(order))), [
210
+ orders
211
+ ]);
212
+ /**
213
+ * 30-day money summary with the prior 30 days behind it (AGL-2136). Over
214
+ * the LOADED window, like every other figure on this card — the query is
215
+ * `limit(200)`, so a store past 200 orders in 60 days is summarising a
216
+ * slice. That is the same bound the analytics card has always had, and
217
+ * making this one silently different would be worse than sharing it.
218
+ */ const summary = useMemo(()=>CommerceModel.summarizeOrderWindow(orders, {
219
+ nowMs: Date.now()
220
+ }), [
221
+ orders
222
+ ]);
223
+ const handleExportCsv = useCallback(()=>{
224
+ // The rows themselves are built by the pure model helper (AGL-1747) so the
225
+ // column-by-column arithmetic is unit-testable without a Firestore mock.
226
+ const csv = CommerceModel.buildOrdersCsv(visibleOrders, productNames);
227
+ const url = URL.createObjectURL(new Blob([
228
+ csv
229
+ ], {
230
+ type: 'text/csv'
231
+ }));
232
+ const anchor = document.createElement('a');
233
+ anchor.href = url;
234
+ anchor.download = 'orders.csv';
235
+ anchor.click();
236
+ URL.revokeObjectURL(url);
237
+ }, [
238
+ visibleOrders,
239
+ productNames
240
+ ]);
241
+ /**
242
+ * Idempotency key for ONE draft attempt (AGL-1697).
243
+ *
244
+ * Minted lazily on the first create click, NOT per call — two clicks (or a
245
+ * click retried after a lost response) must present ONE key so the server
246
+ * replays the original payment link instead of minting a second order.
247
+ * Retired whenever a content field changes: an edited draft is a different
248
+ * order, and replaying the old one against it would hand the merchant a
249
+ * link priced for fields they no longer see. Answering the shipping-country
250
+ * ask also retires it, which is safe — that refusal is served before the
251
+ * server takes the claim, so the first key was never spent.
252
+ */ const draftAttemptKey = useRef('');
253
+ useEffect(()=>{
254
+ draftAttemptKey.current = '';
255
+ }, [
256
+ draft == null ? void 0 : draft.productId,
257
+ draft == null ? void 0 : draft.variantId,
258
+ draft == null ? void 0 : draft.quantity,
259
+ draft == null ? void 0 : draft.email,
260
+ draft == null ? void 0 : draft.shipTo
261
+ ]);
262
+ const handleDraftCreate = useCallback(async ()=>{
263
+ if (!(draft == null ? void 0 : draft.productId)) return;
264
+ setDraft((prev)=>prev ? _extends({}, prev, {
265
+ busy: true
266
+ }) : prev);
267
+ try {
268
+ if (!draftAttemptKey.current) {
269
+ var _ref;
270
+ var _globalThis_crypto_randomUUID, _globalThis_crypto;
271
+ draftAttemptKey.current = (_ref = (_globalThis_crypto = globalThis.crypto) == null ? void 0 : (_globalThis_crypto_randomUUID = _globalThis_crypto.randomUUID) == null ? void 0 : _globalThis_crypto_randomUUID.call(_globalThis_crypto)) != null ? _ref : `${Date.now()}-${Math.random().toString(36).slice(2)}`;
272
+ }
273
+ const response = await authorizedFetch(user, '/api/commerce/draft-order', {
274
+ method: 'POST',
275
+ headers: {
276
+ 'Content-Type': 'application/json',
277
+ // Stable across a retry of THIS attempt (AGL-1697), so a
278
+ // double-click cannot mint two live payment links.
279
+ 'Idempotency-Key': draftAttemptKey.current
280
+ },
281
+ body: JSON.stringify(_extends({
282
+ hostId,
283
+ productId: draft.productId,
284
+ variantId: draft.variantId || undefined,
285
+ quantity: Number(draft.quantity) || 1,
286
+ email: draft.email || undefined
287
+ }, draft.shipTo ? {
288
+ shippingCountry: draft.shipTo
289
+ } : {}))
290
+ });
291
+ const payload = await response.json();
292
+ if (!response.ok) {
293
+ var _ref1;
294
+ // The merchant's rates differ by destination, so the server will not
295
+ // price this order until it knows one (AGL-1792). Reveal the field and
296
+ // let them answer; a store whose rates are the same everywhere, or
297
+ // which configured none, never sends this and never shows it.
298
+ if (payload == null ? void 0 : payload.needsShippingCountry) {
299
+ setDraft((prev)=>{
300
+ var _payload_shippingCountries;
301
+ return prev ? _extends({}, prev, {
302
+ shipCountries: ((_payload_shippingCountries = payload.shippingCountries) == null ? void 0 : _payload_shippingCountries.length) ? payload.shippingCountries : [
303
+ ...CommerceModel.CHECKOUT_SHIPPING_COUNTRIES
304
+ ]
305
+ }) : prev;
306
+ });
307
+ }
308
+ return void enqueueSnackbar((_ref1 = payload == null ? void 0 : payload.error) != null ? _ref1 : 'Draft order failed', {
309
+ variant: 'error',
310
+ allowDuplicate: true
311
+ });
312
+ }
313
+ await navigator.clipboard.writeText(payload.url).catch(()=>undefined);
314
+ enqueueSnackbar('Draft created — payment link copied', {
315
+ variant: 'success',
316
+ persist: false
317
+ });
318
+ setDraft(null);
319
+ } finally{
320
+ setDraft((prev)=>prev ? _extends({}, prev, {
321
+ busy: false
322
+ }) : prev);
323
+ }
324
+ }, [
325
+ draft,
326
+ user,
327
+ hostId,
328
+ enqueueSnackbar
329
+ ]);
330
+ const selectedOrder = (_find = (orderDocs != null ? orderDocs : []).find((order)=>order.$id === selectedId)) != null ? _find : seededOrder && seededOrder.$id === selectedId ? seededOrder : null;
331
+ /**
332
+ * Shared by the two triggers (AGL-1805) so the empty state and the toolbar
333
+ * cannot drift into opening the dialog with different starting fields.
334
+ */ const openDraft = useCallback(()=>setDraft({
335
+ productId: '',
336
+ variantId: '',
337
+ quantity: '1',
338
+ email: ''
339
+ }), []);
340
+ /** What the draft dialog can actually offer. */ const selectableProducts = useMemo(()=>productWindow.rows.filter((product)=>!product.deletedAt), [
341
+ productWindow
342
+ ]);
343
+ return /*#__PURE__*/ _jsxs(CardDisplay, {
344
+ header: 'Orders',
345
+ help: pluginDocsHelp('commerce', {
346
+ anchor: '#orders',
347
+ excerpt: 'Every order with its channel, status and net total. A refunded ' + 'order shows what is left, with the gross beneath it.'
348
+ }),
349
+ contentGutterX: true,
350
+ contentGutterY: true,
351
+ children: [
352
+ orders.length === 0 ? /*
353
+ * An invitation, not a report (AGL-1805). The "Draft order" button
354
+ * used to live in the other arm of this ternary, so the one state a
355
+ * draft order exists for — no sales yet, invoice the customer you
356
+ * already have — was the only state that could not reach it, and
357
+ * every other route into the dialog needs an order to exist first.
358
+ *
359
+ * The filters stay behind deliberately: they belong to a list with
360
+ * rows in it. Export CSV likewise — a header-only file is not
361
+ * something a merchant on day one is looking for.
362
+ */ /*#__PURE__*/ _jsxs(Stack, {
363
+ spacing: 1,
364
+ sx: {
365
+ alignItems: 'flex-start'
366
+ },
367
+ children: [
368
+ /*#__PURE__*/ _jsx(Typography, {
369
+ variant: "body2",
370
+ color: "text.secondary",
371
+ children: 'No orders yet. Storefront sales, POS sales and draft orders ' + 'all appear here as they come in.'
372
+ }),
373
+ /*#__PURE__*/ _jsx(Typography, {
374
+ variant: "body2",
375
+ color: "text.secondary",
376
+ children: 'Selling to someone directly? Draft their order and send them ' + 'a payment link.'
377
+ }),
378
+ /*#__PURE__*/ _jsx(Button, {
379
+ size: "small",
380
+ variant: "contained",
381
+ color: "primary",
382
+ onClick: openDraft,
383
+ children: 'Draft order'
384
+ })
385
+ ]
386
+ }) : /*#__PURE__*/ _jsxs(Stack, {
387
+ spacing: 1,
388
+ children: [
389
+ showStats ? /*#__PURE__*/ _jsxs(Stack, {
390
+ direction: "row",
391
+ spacing: 3,
392
+ sx: {
393
+ flexWrap: 'wrap',
394
+ rowGap: 1
395
+ },
396
+ children: [
397
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
398
+ label: "Revenue · 30d",
399
+ value: `$${(summary.revenueCents / 100).toFixed(2)}`,
400
+ deltaPct: summary.revenueDeltaPct,
401
+ deltaCaption: "vs the previous 30 days"
402
+ }),
403
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
404
+ label: "Orders · 30d",
405
+ value: String(summary.orders),
406
+ deltaPct: summary.ordersDeltaPct,
407
+ deltaCaption: "vs the previous 30 days"
408
+ }),
409
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
410
+ label: "Avg order value",
411
+ value: `$${(summary.aovCents / 100).toFixed(2)}`,
412
+ deltaPct: summary.aovDeltaPct,
413
+ deltaCaption: "vs the previous 30 days"
414
+ })
415
+ ]
416
+ }) : null,
417
+ openDisputes.count > 0 ? /*#__PURE__*/ _jsxs(Alert, {
418
+ severity: openDisputes.overdue ? 'error' : 'warning',
419
+ action: disputeFilter === 'open' ? undefined : /*#__PURE__*/ _jsx(Button, {
420
+ size: "small",
421
+ color: "inherit",
422
+ onClick: ()=>setDisputeFilter('open'),
423
+ children: 'Show them'
424
+ }),
425
+ children: [
426
+ /*#__PURE__*/ _jsx(AlertTitle, {
427
+ children: openDisputes.count === 1 ? 'A shopper has disputed a charge with their bank' : `${openDisputes.count} charges are disputed with the shopper’s bank`
428
+ }),
429
+ openDisputes.soonestDaysLeft === undefined ? 'Answer in the Stripe dashboard while the case is open — an unanswered dispute is decided for the shopper.' : openDisputes.soonestDaysLeft < 0 ? 'The evidence deadline has passed on at least one of these. Stripe decides an unanswered dispute for the shopper.' : `Evidence is due to Stripe in ${openDisputes.soonestDaysLeft} day${openDisputes.soonestDaysLeft === 1 ? '' : 's'} on the tightest of these. An unanswered dispute is decided for the shopper.`
430
+ ]
431
+ }) : null,
432
+ /*#__PURE__*/ _jsxs(Stack, {
433
+ direction: "row",
434
+ spacing: 1,
435
+ sx: {
436
+ alignItems: 'center'
437
+ },
438
+ children: [
439
+ /*#__PURE__*/ _jsxs(TextField, {
440
+ select: true,
441
+ size: "small",
442
+ label: "Product",
443
+ value: productFilter,
444
+ onChange: (event)=>setProductFilter(event.target.value),
445
+ sx: {
446
+ minWidth: 160
447
+ },
448
+ children: [
449
+ /*#__PURE__*/ _jsx(MenuItem, {
450
+ value: "",
451
+ children: 'All products'
452
+ }),
453
+ productWindow.rows.map((product)=>{
454
+ var _product_name;
455
+ return /*#__PURE__*/ _jsx(MenuItem, {
456
+ value: product.$id,
457
+ children: (_product_name = product.name) != null ? _product_name : product.$id
458
+ }, product.$id);
459
+ })
460
+ ]
461
+ }),
462
+ /*#__PURE__*/ _jsxs(TextField, {
463
+ select: true,
464
+ size: "small",
465
+ label: "Period",
466
+ value: dateFilter,
467
+ onChange: (event)=>setDateFilter(event.target.value),
468
+ sx: {
469
+ minWidth: 130
470
+ },
471
+ children: [
472
+ /*#__PURE__*/ _jsx(MenuItem, {
473
+ value: "",
474
+ children: 'All time'
475
+ }),
476
+ /*#__PURE__*/ _jsx(MenuItem, {
477
+ value: "7d",
478
+ children: 'Last 7 days'
479
+ }),
480
+ /*#__PURE__*/ _jsx(MenuItem, {
481
+ value: "30d",
482
+ children: 'Last 30 days'
483
+ })
484
+ ]
485
+ }),
486
+ /*#__PURE__*/ _jsxs(TextField, {
487
+ select: true,
488
+ size: "small",
489
+ label: "Status",
490
+ value: statusFilter,
491
+ onChange: (event)=>setStatusFilter(event.target.value),
492
+ sx: {
493
+ minWidth: 130
494
+ },
495
+ children: [
496
+ /*#__PURE__*/ _jsx(MenuItem, {
497
+ value: "",
498
+ children: 'All statuses'
499
+ }),
500
+ Object.keys(CommerceModel.ORDER_STATUS_LABELS).map((status)=>/*#__PURE__*/ _jsx(MenuItem, {
501
+ value: status,
502
+ children: CommerceModel.ORDER_STATUS_LABELS[status]
503
+ }, status))
504
+ ]
505
+ }),
506
+ /*#__PURE__*/ _jsxs(TextField, {
507
+ select: true,
508
+ size: "small",
509
+ label: "Channel",
510
+ value: channelFilter,
511
+ onChange: (event)=>setChannelFilter(event.target.value),
512
+ sx: {
513
+ minWidth: 120
514
+ },
515
+ children: [
516
+ /*#__PURE__*/ _jsx(MenuItem, {
517
+ value: "",
518
+ children: 'All channels'
519
+ }),
520
+ Object.keys(CommerceModel.ORDER_CHANNEL_LABELS).map((channel)=>/*#__PURE__*/ _jsx(MenuItem, {
521
+ value: channel,
522
+ children: CommerceModel.ORDER_CHANNEL_LABELS[channel]
523
+ }, channel))
524
+ ]
525
+ }),
526
+ /*#__PURE__*/ _jsx(TextField, {
527
+ size: "small",
528
+ label: "Customer",
529
+ placeholder: "Email",
530
+ value: customerFilter,
531
+ onChange: (event)=>setCustomerFilter(event.target.value),
532
+ sx: {
533
+ minWidth: 180
534
+ }
535
+ }),
536
+ /*#__PURE__*/ _jsxs(TextField, {
537
+ select: true,
538
+ size: "small",
539
+ label: "Disputes",
540
+ value: disputeFilter,
541
+ onChange: (event)=>setDisputeFilter(event.target.value),
542
+ sx: {
543
+ minWidth: 140
544
+ },
545
+ children: [
546
+ /*#__PURE__*/ _jsx(MenuItem, {
547
+ value: "",
548
+ children: 'All orders'
549
+ }),
550
+ /*#__PURE__*/ _jsx(MenuItem, {
551
+ value: "open",
552
+ children: 'Open dispute'
553
+ }),
554
+ /*#__PURE__*/ _jsx(MenuItem, {
555
+ value: "lost",
556
+ children: 'Charged back'
557
+ })
558
+ ]
559
+ }),
560
+ /*#__PURE__*/ _jsx(Button, {
561
+ size: "small",
562
+ onClick: handleExportCsv,
563
+ children: 'Export CSV'
564
+ }),
565
+ /*#__PURE__*/ _jsx(Button, {
566
+ size: "small",
567
+ variant: "contained",
568
+ color: "primary",
569
+ onClick: openDraft,
570
+ children: 'Draft order'
571
+ })
572
+ ]
573
+ }),
574
+ /*#__PURE__*/ _jsxs(ScrollTable, {
575
+ size: "small",
576
+ "aria-label": "Orders",
577
+ children: [
578
+ /*#__PURE__*/ _jsx(TableHead, {
579
+ children: /*#__PURE__*/ _jsxs(TableRow, {
580
+ children: [
581
+ /*#__PURE__*/ _jsx(TableCell, {
582
+ children: 'Order'
583
+ }),
584
+ /*#__PURE__*/ _jsx(TableCell, {
585
+ children: 'Customer'
586
+ }),
587
+ /*#__PURE__*/ _jsx(TableCell, {
588
+ children: 'Channel'
589
+ }),
590
+ /*#__PURE__*/ _jsx(TableCell, {
591
+ align: "right",
592
+ children: 'Total'
593
+ }),
594
+ /*#__PURE__*/ _jsx(TableCell, {
595
+ children: 'Status'
596
+ }),
597
+ /*#__PURE__*/ _jsx(TableCell, {
598
+ children: 'Date'
599
+ })
600
+ ]
601
+ })
602
+ }),
603
+ /*#__PURE__*/ _jsx(TableBody, {
604
+ children: visibleOrders.map((order)=>{
605
+ var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _CommerceModel_ORDER_STATUS_LABELS_lifted_status, _CommerceModel_ORDER_STATUS_COLOR_lifted_status;
606
+ var _order_createdAt_toDate, _order_createdAt, _lifted_lineItems_, _lifted_lineItems, _lifted_lineItems1, _lifted_totals;
607
+ const lifted = CommerceModel.liftLegacyOrder(order);
608
+ // A lost chargeback leaves `status: 'refunded'` (AGL-1787),
609
+ // so the status pill on this row cannot tell the two apart
610
+ // either — which is why the dispute chip sits beside it
611
+ // rather than being folded into the status.
612
+ const dispute = CommerceModel.describeOrderDispute(lifted);
613
+ const createdAt = (_order_createdAt = order.createdAt) == null ? void 0 : (_order_createdAt_toDate = _order_createdAt.toDate) == null ? void 0 : _order_createdAt_toDate.call(_order_createdAt);
614
+ const itemName = (_ref = (_ref1 = (_ref2 = (_lifted_lineItems = lifted.lineItems) == null ? void 0 : (_lifted_lineItems_ = _lifted_lineItems[0]) == null ? void 0 : _lifted_lineItems_.name) != null ? _ref2 : productNames[order.productId]) != null ? _ref1 : order.productId) != null ? _ref : '';
615
+ const extraItems = Math.max(0, ((_ref3 = (_lifted_lineItems1 = lifted.lineItems) == null ? void 0 : _lifted_lineItems1.length) != null ? _ref3 : 0) - 1);
616
+ return /*#__PURE__*/ _jsxs(TableRow, {
617
+ hover: true,
618
+ onClick: ()=>setSelectedId(order.$id),
619
+ sx: {
620
+ cursor: 'pointer'
621
+ },
622
+ children: [
623
+ /*#__PURE__*/ _jsxs(TableCell, {
624
+ children: [
625
+ /*#__PURE__*/ _jsx(Typography, {
626
+ variant: "body2",
627
+ children: CommerceModel.formatOrderNumber(lifted, order.$id)
628
+ }),
629
+ /*#__PURE__*/ _jsx(Typography, {
630
+ variant: "caption",
631
+ color: "text.secondary",
632
+ children: extraItems ? `${itemName} +${extraItems} more` : itemName
633
+ })
634
+ ]
635
+ }),
636
+ /*#__PURE__*/ _jsx(TableCell, {
637
+ children: /*#__PURE__*/ _jsx(Typography, {
638
+ variant: "body2",
639
+ noWrap: true,
640
+ children: order.customerEmail || '—'
641
+ })
642
+ }),
643
+ /*#__PURE__*/ _jsx(TableCell, {
644
+ children: /*#__PURE__*/ _jsx(Typography, {
645
+ variant: "body2",
646
+ children: CommerceModel.orderChannelLabel(lifted.channel)
647
+ })
648
+ }),
649
+ /*#__PURE__*/ _jsxs(TableCell, {
650
+ align: "right",
651
+ children: [
652
+ /*#__PURE__*/ _jsx(Typography, {
653
+ variant: "body2",
654
+ children: `$${(CommerceModel.orderNetCents(lifted) / 100).toFixed(2)}`
655
+ }),
656
+ order.refundedCents ? /*#__PURE__*/ _jsx(Typography, {
657
+ variant: "caption",
658
+ color: "text.secondary",
659
+ children: `$${(((_ref4 = (_ref5 = (_lifted_totals = lifted.totals) == null ? void 0 : _lifted_totals.totalCents) != null ? _ref5 : order.amountCents) != null ? _ref4 : 0) / 100).toFixed(2)} less refunds`
660
+ }) : null
661
+ ]
662
+ }),
663
+ /*#__PURE__*/ _jsxs(TableCell, {
664
+ children: [
665
+ /*#__PURE__*/ _jsxs(Stack, {
666
+ direction: "row",
667
+ spacing: 0.5,
668
+ sx: {
669
+ alignItems: 'center'
670
+ },
671
+ children: [
672
+ /*#__PURE__*/ _jsx(Chip, {
673
+ label: (_CommerceModel_ORDER_STATUS_LABELS_lifted_status = CommerceModel.ORDER_STATUS_LABELS[lifted.status]) != null ? _CommerceModel_ORDER_STATUS_LABELS_lifted_status : lifted.status,
674
+ size: "small",
675
+ color: (_CommerceModel_ORDER_STATUS_COLOR_lifted_status = CommerceModel.ORDER_STATUS_COLOR[lifted.status]) != null ? _CommerceModel_ORDER_STATUS_COLOR_lifted_status : 'default',
676
+ variant: "outlined"
677
+ }),
678
+ dispute ? /*#__PURE__*/ _jsx(Tooltip, {
679
+ title: dispute.detail,
680
+ children: /*#__PURE__*/ _jsx(Chip, {
681
+ label: dispute.label,
682
+ size: "small",
683
+ color: DISPUTE_COLOR[dispute.tone],
684
+ variant: "filled"
685
+ })
686
+ }) : null
687
+ ]
688
+ }),
689
+ (dispute == null ? void 0 : dispute.evidenceDaysLeft) !== undefined ? /*#__PURE__*/ _jsx(Typography, {
690
+ variant: "caption",
691
+ component: "div",
692
+ color: dispute.evidenceDaysLeft < 0 ? 'error' : 'warning.main',
693
+ children: dispute.evidenceDaysLeft < 0 ? 'Evidence deadline passed' : `Evidence due in ${dispute.evidenceDaysLeft} day${dispute.evidenceDaysLeft === 1 ? '' : 's'}`
694
+ }) : null
695
+ ]
696
+ }),
697
+ /*#__PURE__*/ _jsxs(TableCell, {
698
+ children: [
699
+ /*#__PURE__*/ _jsx(Typography, {
700
+ variant: "body2",
701
+ noWrap: true,
702
+ children: createdAt ? createdAt.toLocaleDateString() : '—'
703
+ }),
704
+ /*#__PURE__*/ _jsx(Typography, {
705
+ variant: "caption",
706
+ color: "text.secondary",
707
+ children: createdAt ? createdAt.toLocaleTimeString() : ''
708
+ })
709
+ ]
710
+ })
711
+ ]
712
+ }, order.$id);
713
+ })
714
+ })
715
+ ]
716
+ }),
717
+ orderWindow.truncated ? /*
718
+ * Where the filters and the export stop. Both run over what was
719
+ * read, so a store past this window would otherwise see a status
720
+ * filter return nothing and read it as having no such orders.
721
+ */ /*#__PURE__*/ _jsx(Typography, {
722
+ variant: "caption",
723
+ color: "text.secondary",
724
+ children: `Showing the ${ORDERS_WINDOW} most recent orders. Filters and Export CSV cover these.`
725
+ }) : null
726
+ ]
727
+ }),
728
+ selectedOrder ? /*#__PURE__*/ _jsx(OrderDetailDialog, {
729
+ hostId: hostId,
730
+ order: selectedOrder,
731
+ onClose: ()=>setSelectedId(null)
732
+ }) : null,
733
+ /*#__PURE__*/ _jsxs(Dialog, {
734
+ open: Boolean(draft),
735
+ onClose: ()=>setDraft(null),
736
+ maxWidth: "xs",
737
+ fullWidth: true,
738
+ children: [
739
+ /*#__PURE__*/ _jsx(DialogTitle, {
740
+ children: 'Draft order'
741
+ }),
742
+ /*#__PURE__*/ _jsxs(DialogContent, {
743
+ sx: {
744
+ display: 'flex',
745
+ flexDirection: 'column',
746
+ gap: 2
747
+ },
748
+ children: [
749
+ /*#__PURE__*/ _jsx(TextField, {
750
+ label: "Product",
751
+ value: (_ref1 = draft == null ? void 0 : draft.productId) != null ? _ref1 : '',
752
+ onChange: (event)=>setDraft((prev)=>prev ? _extends({}, prev, {
753
+ productId: event.target.value,
754
+ variantId: ''
755
+ }) : prev),
756
+ size: "small",
757
+ select: true,
758
+ sx: {
759
+ mt: 1
760
+ },
761
+ /*
762
+ * The second dead end behind the first (AGL-1805): a store with
763
+ * no orders may have no products either, and a draft order is
764
+ * composed from one — so "Create & copy link" stays disabled. Say
765
+ * why, rather than opening an empty menu onto nothing.
766
+ */ helperText: selectableProducts.length === 0 ? 'Add a product to this store first — a draft order is built from one.' : undefined,
767
+ children: selectableProducts.map((product)=>{
768
+ var _product_name;
769
+ return /*#__PURE__*/ _jsx(MenuItem, {
770
+ value: product.$id,
771
+ children: (_product_name = product.name) != null ? _product_name : product.$id
772
+ }, product.$id);
773
+ })
774
+ }),
775
+ (()=>{
776
+ var _ref;
777
+ const product = productWindow.rows.find((item)=>item.$id === (draft == null ? void 0 : draft.productId));
778
+ const variants = product ? CommerceModel.liftLegacyProduct(product).variants : [];
779
+ return variants.length > 1 ? /*#__PURE__*/ _jsx(TextField, {
780
+ label: "Variant",
781
+ value: (_ref = draft == null ? void 0 : draft.variantId) != null ? _ref : '',
782
+ onChange: (event)=>setDraft((prev)=>prev ? _extends({}, prev, {
783
+ variantId: event.target.value
784
+ }) : prev),
785
+ size: "small",
786
+ select: true,
787
+ children: variants.map((variant)=>{
788
+ var _variant_options;
789
+ return /*#__PURE__*/ _jsx(MenuItem, {
790
+ value: variant.id,
791
+ children: `${Object.values((_variant_options = variant.options) != null ? _variant_options : {}).join(' / ') || 'Default'} — $${variant.priceUsd}`
792
+ }, variant.id);
793
+ })
794
+ }) : null;
795
+ })(),
796
+ /*#__PURE__*/ _jsx(TextField, {
797
+ label: "Quantity",
798
+ value: (_ref2 = draft == null ? void 0 : draft.quantity) != null ? _ref2 : '1',
799
+ onChange: (event)=>setDraft((prev)=>prev ? _extends({}, prev, {
800
+ quantity: event.target.value.replace(/[^0-9]/g, '')
801
+ }) : prev),
802
+ size: "small",
803
+ slotProps: {
804
+ htmlInput: {
805
+ inputMode: 'numeric'
806
+ }
807
+ }
808
+ }),
809
+ /*#__PURE__*/ _jsx(TextField, {
810
+ label: "Buyer email (optional)",
811
+ value: (_ref3 = draft == null ? void 0 : draft.email) != null ? _ref3 : '',
812
+ onChange: (event)=>setDraft((prev)=>prev ? _extends({}, prev, {
813
+ email: event.target.value
814
+ }) : prev),
815
+ size: "small"
816
+ }),
817
+ (draft == null ? void 0 : (_draft_shipCountries = draft.shipCountries) == null ? void 0 : _draft_shipCountries.length) ? /*#__PURE__*/ _jsx(TextField, {
818
+ label: "Ships to",
819
+ value: (_ref4 = draft == null ? void 0 : draft.shipTo) != null ? _ref4 : '',
820
+ onChange: (event)=>setDraft((prev)=>prev ? _extends({}, prev, {
821
+ shipTo: event.target.value
822
+ }) : prev),
823
+ size: "small",
824
+ select: true,
825
+ helperText: 'This store’s shipping rates differ by destination, so the ' + 'payment link has to be priced for one.',
826
+ children: draft.shipCountries.map((code)=>{
827
+ var _CommerceModel_CHECKOUT_SHIPPING_COUNTRY_NAMES_code;
828
+ return /*#__PURE__*/ _jsx(MenuItem, {
829
+ value: code,
830
+ children: (_CommerceModel_CHECKOUT_SHIPPING_COUNTRY_NAMES_code = CommerceModel.CHECKOUT_SHIPPING_COUNTRY_NAMES[code]) != null ? _CommerceModel_CHECKOUT_SHIPPING_COUNTRY_NAMES_code : code
831
+ }, code);
832
+ })
833
+ }) : null
834
+ ]
835
+ }),
836
+ /*#__PURE__*/ _jsxs(DialogActions, {
837
+ children: [
838
+ /*#__PURE__*/ _jsx(Button, {
839
+ onClick: ()=>setDraft(null),
840
+ children: 'Cancel'
841
+ }),
842
+ /*#__PURE__*/ _jsx(Button, {
843
+ variant: "contained",
844
+ color: "primary",
845
+ disabled: !(draft == null ? void 0 : draft.productId) || (draft == null ? void 0 : draft.busy) || // Once asked, the answer is required: retrying without one is
846
+ // refused again, so the button would only look broken.
847
+ Boolean((draft == null ? void 0 : (_draft_shipCountries1 = draft.shipCountries) == null ? void 0 : _draft_shipCountries1.length) && !(draft == null ? void 0 : draft.shipTo)),
848
+ onClick: handleDraftCreate,
849
+ children: 'Create & copy link'
850
+ })
851
+ ]
852
+ })
853
+ ]
854
+ })
855
+ ]
856
+ });
857
+ }
858
+ HostOrdersCard.displayName = 'HostOrdersCard';
859
+ export default HostOrdersCard;
860
+
861
+ //# sourceMappingURL=host-orders-card.component.js.map