@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.
- package/LICENSE +201 -0
- package/README.md +10 -0
- package/package.json +57 -0
- package/src/index.d.ts +38 -0
- package/src/index.js +38 -0
- package/src/index.js.map +1 -0
- package/src/lib/components/account.d.ts +31 -0
- package/src/lib/components/account.js +645 -0
- package/src/lib/components/account.js.map +1 -0
- package/src/lib/components/cart.d.ts +38 -0
- package/src/lib/components/cart.js +851 -0
- package/src/lib/components/cart.js.map +1 -0
- package/src/lib/components/commerce-console-page.d.ts +32 -0
- package/src/lib/components/commerce-console-page.js +296 -0
- package/src/lib/components/commerce-console-page.js.map +1 -0
- package/src/lib/components/commerce-console-sections.d.ts +34 -0
- package/src/lib/components/commerce-console-sections.js +62 -0
- package/src/lib/components/commerce-console-sections.js.map +1 -0
- package/src/lib/components/console/catalog-organization-card.component.d.ts +14 -0
- package/src/lib/components/console/catalog-organization-card.component.js +1087 -0
- package/src/lib/components/console/catalog-organization-card.component.js.map +1 -0
- package/src/lib/components/console/commerce-analytics-card.component.d.ts +27 -0
- package/src/lib/components/console/commerce-analytics-card.component.js +310 -0
- package/src/lib/components/console/commerce-analytics-card.component.js.map +1 -0
- package/src/lib/components/console/commerce-glance-card.component.d.ts +20 -0
- package/src/lib/components/console/commerce-glance-card.component.js +340 -0
- package/src/lib/components/console/commerce-glance-card.component.js.map +1 -0
- package/src/lib/components/console/commerce-stat-tile.component.d.ts +37 -0
- package/src/lib/components/console/commerce-stat-tile.component.js +72 -0
- package/src/lib/components/console/commerce-stat-tile.component.js.map +1 -0
- package/src/lib/components/console/discounts-card.component.d.ts +14 -0
- package/src/lib/components/console/discounts-card.component.js +443 -0
- package/src/lib/components/console/discounts-card.component.js.map +1 -0
- package/src/lib/components/console/entitlement-gate.component.d.ts +76 -0
- package/src/lib/components/console/entitlement-gate.component.js +115 -0
- package/src/lib/components/console/entitlement-gate.component.js.map +1 -0
- package/src/lib/components/console/gift-cards-card.component.d.ts +29 -0
- package/src/lib/components/console/gift-cards-card.component.js +379 -0
- package/src/lib/components/console/gift-cards-card.component.js.map +1 -0
- package/src/lib/components/console/host-coupons-card.component.d.ts +14 -0
- package/src/lib/components/console/host-coupons-card.component.js +252 -0
- package/src/lib/components/console/host-coupons-card.component.js.map +1 -0
- package/src/lib/components/console/host-orders-card.component.d.ts +13 -0
- package/src/lib/components/console/host-orders-card.component.js +861 -0
- package/src/lib/components/console/host-orders-card.component.js.map +1 -0
- package/src/lib/components/console/locations-card.component.d.ts +14 -0
- package/src/lib/components/console/locations-card.component.js +256 -0
- package/src/lib/components/console/locations-card.component.js.map +1 -0
- package/src/lib/components/console/member-posts-card.component.d.ts +8 -0
- package/src/lib/components/console/member-posts-card.component.js +283 -0
- package/src/lib/components/console/member-posts-card.component.js.map +1 -0
- package/src/lib/components/console/newest-site-users-card.component.d.ts +36 -0
- package/src/lib/components/console/newest-site-users-card.component.js +126 -0
- package/src/lib/components/console/newest-site-users-card.component.js.map +1 -0
- package/src/lib/components/console/order-detail-dialog.component.d.ts +28 -0
- package/src/lib/components/console/order-detail-dialog.component.js +976 -0
- package/src/lib/components/console/order-detail-dialog.component.js.map +1 -0
- package/src/lib/components/console/paid-media.d.ts +127 -0
- package/src/lib/components/console/paid-media.js +397 -0
- package/src/lib/components/console/paid-media.js.map +1 -0
- package/src/lib/components/console/payments-settings-card.component.d.ts +13 -0
- package/src/lib/components/console/payments-settings-card.component.js +295 -0
- package/src/lib/components/console/payments-settings-card.component.js.map +1 -0
- package/src/lib/components/console/pos-page.component.d.ts +13 -0
- package/src/lib/components/console/pos-page.component.js +916 -0
- package/src/lib/components/console/pos-page.component.js.map +1 -0
- package/src/lib/components/console/product-editor-dialog.component.d.ts +32 -0
- package/src/lib/components/console/product-editor-dialog.component.js +1374 -0
- package/src/lib/components/console/product-editor-dialog.component.js.map +1 -0
- package/src/lib/components/console/products-hub-card.component.d.ts +16 -0
- package/src/lib/components/console/products-hub-card.component.js +1280 -0
- package/src/lib/components/console/products-hub-card.component.js.map +1 -0
- package/src/lib/components/console/products-hub-zone.component.d.ts +50 -0
- package/src/lib/components/console/products-hub-zone.component.js +200 -0
- package/src/lib/components/console/products-hub-zone.component.js.map +1 -0
- package/src/lib/components/console/recovery-queue-card.component.d.ts +39 -0
- package/src/lib/components/console/recovery-queue-card.component.js +262 -0
- package/src/lib/components/console/recovery-queue-card.component.js.map +1 -0
- package/src/lib/components/console/registers-card.component.d.ts +21 -0
- package/src/lib/components/console/registers-card.component.js +296 -0
- package/src/lib/components/console/registers-card.component.js.map +1 -0
- package/src/lib/components/console/reservations-card.component.d.ts +14 -0
- package/src/lib/components/console/reservations-card.component.js +650 -0
- package/src/lib/components/console/reservations-card.component.js.map +1 -0
- package/src/lib/components/console/reviews-moderation-card.component.d.ts +8 -0
- package/src/lib/components/console/reviews-moderation-card.component.js +235 -0
- package/src/lib/components/console/reviews-moderation-card.component.js.map +1 -0
- package/src/lib/components/console/shipping-settings-card.component.d.ts +38 -0
- package/src/lib/components/console/shipping-settings-card.component.js +560 -0
- package/src/lib/components/console/shipping-settings-card.component.js.map +1 -0
- package/src/lib/components/console/stock-movements-card.component.d.ts +31 -0
- package/src/lib/components/console/stock-movements-card.component.js +333 -0
- package/src/lib/components/console/stock-movements-card.component.js.map +1 -0
- package/src/lib/components/console/store-settings-card.component.d.ts +14 -0
- package/src/lib/components/console/store-settings-card.component.js +300 -0
- package/src/lib/components/console/store-settings-card.component.js.map +1 -0
- package/src/lib/components/console/storefront-tax-summary-card.component.d.ts +73 -0
- package/src/lib/components/console/storefront-tax-summary-card.component.js +408 -0
- package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -0
- package/src/lib/components/console/suppliers-card.component.d.ts +8 -0
- package/src/lib/components/console/suppliers-card.component.js +328 -0
- package/src/lib/components/console/suppliers-card.component.js.map +1 -0
- package/src/lib/components/console/tax-settings-card.component.d.ts +14 -0
- package/src/lib/components/console/tax-settings-card.component.js +473 -0
- package/src/lib/components/console/tax-settings-card.component.js.map +1 -0
- package/src/lib/components/gate.d.ts +39 -0
- package/src/lib/components/gate.js +202 -0
- package/src/lib/components/gate.js.map +1 -0
- package/src/lib/components/gated-video.d.ts +40 -0
- package/src/lib/components/gated-video.js +366 -0
- package/src/lib/components/gated-video.js.map +1 -0
- package/src/lib/components/member-feed.d.ts +32 -0
- package/src/lib/components/member-feed.js +198 -0
- package/src/lib/components/member-feed.js.map +1 -0
- package/src/lib/components/member-recovery.d.ts +35 -0
- package/src/lib/components/member-recovery.js +313 -0
- package/src/lib/components/member-recovery.js.map +1 -0
- package/src/lib/components/member-signin.d.ts +35 -0
- package/src/lib/components/member-signin.js +257 -0
- package/src/lib/components/member-signin.js.map +1 -0
- package/src/lib/components/member-signup.d.ts +34 -0
- package/src/lib/components/member-signup.js +287 -0
- package/src/lib/components/member-signup.js.map +1 -0
- package/src/lib/components/newsletter-signup.d.ts +39 -0
- package/src/lib/components/newsletter-signup.js +229 -0
- package/src/lib/components/newsletter-signup.js.map +1 -0
- package/src/lib/components/product-detail.d.ts +38 -0
- package/src/lib/components/product-detail.js +1022 -0
- package/src/lib/components/product-detail.js.map +1 -0
- package/src/lib/components/product-grid.d.ts +67 -0
- package/src/lib/components/product-grid.js +909 -0
- package/src/lib/components/product-grid.js.map +1 -0
- package/src/lib/components/product-reviews.d.ts +32 -0
- package/src/lib/components/product-reviews.js +349 -0
- package/src/lib/components/product-reviews.js.map +1 -0
- package/src/lib/components/related-products.d.ts +33 -0
- package/src/lib/components/related-products.js +232 -0
- package/src/lib/components/related-products.js.map +1 -0
- package/src/lib/components/reservation-widget.d.ts +33 -0
- package/src/lib/components/reservation-widget.js +418 -0
- package/src/lib/components/reservation-widget.js.map +1 -0
- package/src/lib/components/storefront-payment-element-fallback.d.ts +18 -0
- package/src/lib/components/storefront-payment-element-fallback.js +51 -0
- package/src/lib/components/storefront-payment-element-fallback.js.map +1 -0
- package/src/lib/components/storefront-payment-element.d.ts +78 -0
- package/src/lib/components/storefront-payment-element.js +156 -0
- package/src/lib/components/storefront-payment-element.js.map +1 -0
- package/src/lib/components/wishlist.d.ts +46 -0
- package/src/lib/components/wishlist.js +304 -0
- package/src/lib/components/wishlist.js.map +1 -0
- package/src/lib/constants/bundle-common.d.ts +18 -0
- package/src/lib/constants/bundle-common.js +18 -0
- package/src/lib/constants/bundle-common.js.map +1 -0
- package/src/lib/constants/product-filters.d.ts +35 -0
- package/src/lib/constants/product-filters.js +109 -0
- package/src/lib/constants/product-filters.js.map +1 -0
- package/src/lib/model/commerce-cart.d.ts +52 -0
- package/src/lib/model/commerce-cart.js +102 -0
- package/src/lib/model/commerce-cart.js.map +1 -0
- package/src/lib/model/commerce-connect-transfer.d.ts +243 -0
- package/src/lib/model/commerce-connect-transfer.js +231 -0
- package/src/lib/model/commerce-connect-transfer.js.map +1 -0
- package/src/lib/model/commerce-discounts.d.ts +164 -0
- package/src/lib/model/commerce-discounts.js +231 -0
- package/src/lib/model/commerce-discounts.js.map +1 -0
- package/src/lib/model/commerce-dispute.d.ts +124 -0
- package/src/lib/model/commerce-dispute.js +225 -0
- package/src/lib/model/commerce-dispute.js.map +1 -0
- package/src/lib/model/commerce-gift-cards.d.ts +107 -0
- package/src/lib/model/commerce-gift-cards.js +121 -0
- package/src/lib/model/commerce-gift-cards.js.map +1 -0
- package/src/lib/model/commerce-io.d.ts +36 -0
- package/src/lib/model/commerce-io.js +245 -0
- package/src/lib/model/commerce-io.js.map +1 -0
- package/src/lib/model/commerce-orders.d.ts +1040 -0
- package/src/lib/model/commerce-orders.js +1022 -0
- package/src/lib/model/commerce-orders.js.map +1 -0
- package/src/lib/model/commerce-promotions.d.ts +188 -0
- package/src/lib/model/commerce-promotions.js +199 -0
- package/src/lib/model/commerce-promotions.js.map +1 -0
- package/src/lib/model/commerce-reservations.d.ts +175 -0
- package/src/lib/model/commerce-reservations.js +157 -0
- package/src/lib/model/commerce-reservations.js.map +1 -0
- package/src/lib/model/commerce-shipping.d.ts +316 -0
- package/src/lib/model/commerce-shipping.js +484 -0
- package/src/lib/model/commerce-shipping.js.map +1 -0
- package/src/lib/model/commerce-stock-holds.d.ts +199 -0
- package/src/lib/model/commerce-stock-holds.js +190 -0
- package/src/lib/model/commerce-stock-holds.js.map +1 -0
- package/src/lib/model/commerce-subscription-status.d.ts +67 -0
- package/src/lib/model/commerce-subscription-status.js +76 -0
- package/src/lib/model/commerce-subscription-status.js.map +1 -0
- package/src/lib/model/commerce-tax-decision.d.ts +222 -0
- package/src/lib/model/commerce-tax-decision.js +165 -0
- package/src/lib/model/commerce-tax-decision.js.map +1 -0
- package/src/lib/model/commerce-tax.d.ts +176 -0
- package/src/lib/model/commerce-tax.js +92 -0
- package/src/lib/model/commerce-tax.js.map +1 -0
- package/src/lib/model/commerce.d.ts +551 -0
- package/src/lib/model/commerce.js +739 -0
- package/src/lib/model/commerce.js.map +1 -0
- package/src/lib/model/index.d.ts +40 -0
- package/src/lib/model/index.js +40 -0
- package/src/lib/model/index.js.map +1 -0
- package/src/lib/model/order-figures.d.ts +48 -0
- package/src/lib/model/order-figures.js +74 -0
- package/src/lib/model/order-figures.js.map +1 -0
- package/src/lib/model/plugin-permissions.d.ts +23 -0
- package/src/lib/model/plugin-permissions.js +34 -0
- package/src/lib/model/plugin-permissions.js.map +1 -0
- package/src/lib/model/purchase-analytics.d.ts +186 -0
- package/src/lib/model/purchase-analytics.js +216 -0
- package/src/lib/model/purchase-analytics.js.map +1 -0
- package/src/lib/plugin-config.d.ts +62 -0
- package/src/lib/plugin-config.js +78 -0
- package/src/lib/plugin-config.js.map +1 -0
- package/src/lib/plugin.d.ts +28 -0
- package/src/lib/plugin.js +147 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/server/billing-webhook.d.ts +26 -0
- package/src/lib/server/billing-webhook.js +4011 -0
- package/src/lib/server/billing-webhook.js.map +1 -0
- package/src/lib/server/cancel-order.d.ts +87 -0
- package/src/lib/server/cancel-order.js +368 -0
- package/src/lib/server/cancel-order.js.map +1 -0
- package/src/lib/server/cart-checkout.d.ts +25 -0
- package/src/lib/server/cart-checkout.js +976 -0
- package/src/lib/server/cart-checkout.js.map +1 -0
- package/src/lib/server/cart-cookie.d.ts +32 -0
- package/src/lib/server/cart-cookie.js +77 -0
- package/src/lib/server/cart-cookie.js.map +1 -0
- package/src/lib/server/cart.d.ts +34 -0
- package/src/lib/server/cart.js +181 -0
- package/src/lib/server/cart.js.map +1 -0
- package/src/lib/server/catalog.d.ts +127 -0
- package/src/lib/server/catalog.js +277 -0
- package/src/lib/server/catalog.js.map +1 -0
- package/src/lib/server/checkout.d.ts +36 -0
- package/src/lib/server/checkout.js +915 -0
- package/src/lib/server/checkout.js.map +1 -0
- package/src/lib/server/connect.d.ts +26 -0
- package/src/lib/server/connect.js +238 -0
- package/src/lib/server/connect.js.map +1 -0
- package/src/lib/server/contact-refund.d.ts +117 -0
- package/src/lib/server/contact-refund.js +196 -0
- package/src/lib/server/contact-refund.js.map +1 -0
- package/src/lib/server/download.d.ts +39 -0
- package/src/lib/server/download.js +206 -0
- package/src/lib/server/download.js.map +1 -0
- package/src/lib/server/draft-order.d.ts +26 -0
- package/src/lib/server/draft-order.js +706 -0
- package/src/lib/server/draft-order.js.map +1 -0
- package/src/lib/server/feed.d.ts +24 -0
- package/src/lib/server/feed.js +59 -0
- package/src/lib/server/feed.js.map +1 -0
- package/src/lib/server/fulfill-order.d.ts +97 -0
- package/src/lib/server/fulfill-order.js +235 -0
- package/src/lib/server/fulfill-order.js.map +1 -0
- package/src/lib/server/gate.d.ts +36 -0
- package/src/lib/server/gate.js +112 -0
- package/src/lib/server/gate.js.map +1 -0
- package/src/lib/server/gift-cards.d.ts +42 -0
- package/src/lib/server/gift-cards.js +219 -0
- package/src/lib/server/gift-cards.js.map +1 -0
- package/src/lib/server/low-stock.d.ts +49 -0
- package/src/lib/server/low-stock.js +60 -0
- package/src/lib/server/low-stock.js.map +1 -0
- package/src/lib/server/manual-tax-rate.d.ts +82 -0
- package/src/lib/server/manual-tax-rate.js +113 -0
- package/src/lib/server/manual-tax-rate.js.map +1 -0
- package/src/lib/server/member-feed.d.ts +24 -0
- package/src/lib/server/member-feed.js +72 -0
- package/src/lib/server/member-feed.js.map +1 -0
- package/src/lib/server/member-name-search.d.ts +37 -0
- package/src/lib/server/member-name-search.js +42 -0
- package/src/lib/server/member-name-search.js.map +1 -0
- package/src/lib/server/member-post.d.ts +23 -0
- package/src/lib/server/member-post.js +166 -0
- package/src/lib/server/member-post.js.map +1 -0
- package/src/lib/server/membership-account.d.ts +37 -0
- package/src/lib/server/membership-account.js +148 -0
- package/src/lib/server/membership-account.js.map +1 -0
- package/src/lib/server/membership-admin-password.d.ts +33 -0
- package/src/lib/server/membership-admin-password.js +202 -0
- package/src/lib/server/membership-admin-password.js.map +1 -0
- package/src/lib/server/membership-content.d.ts +23 -0
- package/src/lib/server/membership-content.js +105 -0
- package/src/lib/server/membership-content.js.map +1 -0
- package/src/lib/server/membership-login.d.ts +19 -0
- package/src/lib/server/membership-login.js +137 -0
- package/src/lib/server/membership-login.js.map +1 -0
- package/src/lib/server/membership-logout.d.ts +19 -0
- package/src/lib/server/membership-logout.js +35 -0
- package/src/lib/server/membership-logout.js.map +1 -0
- package/src/lib/server/membership-recover.d.ts +60 -0
- package/src/lib/server/membership-recover.js +244 -0
- package/src/lib/server/membership-recover.js.map +1 -0
- package/src/lib/server/membership-register.d.ts +22 -0
- package/src/lib/server/membership-register.js +241 -0
- package/src/lib/server/membership-register.js.map +1 -0
- package/src/lib/server/membership-reset.d.ts +26 -0
- package/src/lib/server/membership-reset.js +88 -0
- package/src/lib/server/membership-reset.js.map +1 -0
- package/src/lib/server/membership-wishlist.d.ts +23 -0
- package/src/lib/server/membership-wishlist.js +89 -0
- package/src/lib/server/membership-wishlist.js.map +1 -0
- package/src/lib/server/membership.d.ts +96 -0
- package/src/lib/server/membership.js +222 -0
- package/src/lib/server/membership.js.map +1 -0
- package/src/lib/server/native-checkout.d.ts +170 -0
- package/src/lib/server/native-checkout.js +193 -0
- package/src/lib/server/native-checkout.js.map +1 -0
- package/src/lib/server/newsletter.d.ts +23 -0
- package/src/lib/server/newsletter.js +323 -0
- package/src/lib/server/newsletter.js.map +1 -0
- package/src/lib/server/notify-restock.d.ts +22 -0
- package/src/lib/server/notify-restock.js +84 -0
- package/src/lib/server/notify-restock.js.map +1 -0
- package/src/lib/server/order-analytics.d.ts +134 -0
- package/src/lib/server/order-analytics.js +263 -0
- package/src/lib/server/order-analytics.js.map +1 -0
- package/src/lib/server/order-figures.d.ts +33 -0
- package/src/lib/server/order-figures.js +220 -0
- package/src/lib/server/order-figures.js.map +1 -0
- package/src/lib/server/paid-media-delivery.d.ts +173 -0
- package/src/lib/server/paid-media-delivery.js +212 -0
- package/src/lib/server/paid-media-delivery.js.map +1 -0
- package/src/lib/server/pos-order.d.ts +54 -0
- package/src/lib/server/pos-order.js +1137 -0
- package/src/lib/server/pos-order.js.map +1 -0
- package/src/lib/server/process-abandoned.d.ts +54 -0
- package/src/lib/server/process-abandoned.js +222 -0
- package/src/lib/server/process-abandoned.js.map +1 -0
- package/src/lib/server/process-restock.d.ts +42 -0
- package/src/lib/server/process-restock.js +219 -0
- package/src/lib/server/process-restock.js.map +1 -0
- package/src/lib/server/product-card.d.ts +29 -0
- package/src/lib/server/product-card.js +54 -0
- package/src/lib/server/product-card.js.map +1 -0
- package/src/lib/server/product.d.ts +70 -0
- package/src/lib/server/product.js +105 -0
- package/src/lib/server/product.js.map +1 -0
- package/src/lib/server/promotion-hold.d.ts +144 -0
- package/src/lib/server/promotion-hold.js +174 -0
- package/src/lib/server/promotion-hold.js.map +1 -0
- package/src/lib/server/reconcile-stock.d.ts +106 -0
- package/src/lib/server/reconcile-stock.js +349 -0
- package/src/lib/server/reconcile-stock.js.map +1 -0
- package/src/lib/server/refund.d.ts +45 -0
- package/src/lib/server/refund.js +607 -0
- package/src/lib/server/refund.js.map +1 -0
- package/src/lib/server/related.d.ts +24 -0
- package/src/lib/server/related.js +104 -0
- package/src/lib/server/related.js.map +1 -0
- package/src/lib/server/reservation-availability.d.ts +23 -0
- package/src/lib/server/reservation-availability.js +111 -0
- package/src/lib/server/reservation-availability.js.map +1 -0
- package/src/lib/server/reserve-stock.d.ts +156 -0
- package/src/lib/server/reserve-stock.js +146 -0
- package/src/lib/server/reserve-stock.js.map +1 -0
- package/src/lib/server/reserve.d.ts +25 -0
- package/src/lib/server/reserve.js +426 -0
- package/src/lib/server/reserve.js.map +1 -0
- package/src/lib/server/restock-flag.d.ts +202 -0
- package/src/lib/server/restock-flag.js +449 -0
- package/src/lib/server/restock-flag.js.map +1 -0
- package/src/lib/server/reviews.d.ts +51 -0
- package/src/lib/server/reviews.js +132 -0
- package/src/lib/server/reviews.js.map +1 -0
- package/src/lib/server/site-page-enricher.d.ts +42 -0
- package/src/lib/server/site-page-enricher.js +149 -0
- package/src/lib/server/site-page-enricher.js.map +1 -0
- package/src/lib/server/site-page-resolver.d.ts +26 -0
- package/src/lib/server/site-page-resolver.js +223 -0
- package/src/lib/server/site-page-resolver.js.map +1 -0
- package/src/lib/server/stock-hold.d.ts +127 -0
- package/src/lib/server/stock-hold.js +258 -0
- package/src/lib/server/stock-hold.js.map +1 -0
- package/src/lib/server/storefront-tax-record.d.ts +22 -0
- package/src/lib/server/storefront-tax-record.js +218 -0
- package/src/lib/server/storefront-tax-record.js.map +1 -0
- package/src/lib/server/storefront-tax.d.ts +197 -0
- package/src/lib/server/storefront-tax.js +245 -0
- package/src/lib/server/storefront-tax.js.map +1 -0
- package/src/lib/server/stream.d.ts +25 -0
- package/src/lib/server/stream.js +191 -0
- package/src/lib/server/stream.js.map +1 -0
- package/src/lib/server/subscription-portal.d.ts +24 -0
- package/src/lib/server/subscription-portal.js +91 -0
- package/src/lib/server/subscription-portal.js.map +1 -0
- package/src/lib/server/supplier-outbox.d.ts +190 -0
- package/src/lib/server/supplier-outbox.js +342 -0
- package/src/lib/server/supplier-outbox.js.map +1 -0
- package/src/lib/server/supplier-update.d.ts +23 -0
- package/src/lib/server/supplier-update.js +289 -0
- package/src/lib/server/supplier-update.js.map +1 -0
- package/src/lib/server/tax-profile.d.ts +29 -0
- package/src/lib/server/tax-profile.js +40 -0
- package/src/lib/server/tax-profile.js.map +1 -0
- package/src/lib/server.d.ts +32 -0
- package/src/lib/server.js +311 -0
- package/src/lib/server.js.map +1 -0
- package/src/lib/site.d.ts +27 -0
- package/src/lib/site.js +134 -0
- package/src/lib/site.js.map +1 -0
- package/src/lib/utils/escape-html.d.ts +41 -0
- package/src/lib/utils/escape-html.js +41 -0
- package/src/lib/utils/escape-html.js.map +1 -0
- package/src/lib/utils/generate-preset-id.d.ts +19 -0
- package/src/lib/utils/generate-preset-id.js +25 -0
- package/src/lib/utils/generate-preset-id.js.map +1 -0
- package/src/lib/utils/member-continue.d.ts +45 -0
- package/src/lib/utils/member-continue.js +49 -0
- package/src/lib/utils/member-continue.js.map +1 -0
- package/src/lib/utils/use-storefront-purchase-event.d.ts +60 -0
- package/src/lib/utils/use-storefront-purchase-event.js +142 -0
- package/src/lib/utils/use-storefront-purchase-event.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/components/console/product-editor-dialog.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport * as CommerceModel from '../../model'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { Timestamp } from '@aglyn/shared-util-timestamp'\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n IconButton,\n MenuItem,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from '@mui/material'\nimport { collection, doc, getDoc, setDoc } from 'firebase/firestore'\nimport { useCallback, useMemo, useState } from 'react'\nimport {\n ceilingedWindow,\n collectionCeiling,\n useFirestore,\n useFirestoreCollection,\n useHostResourceApi,\n writeGuardedBySeed,\n} from '@aglyn/tenant-feature-instance'\nimport { type PickedMedia, useMediaPicker } from '@aglyn/aglyn'\nimport { useConsoleWidgetSlot } from '@aglyn/aglyn/app-utils/console-widget-slot-context'\nimport {\n seoListingFieldCount,\n seoListingFieldTooLong,\n type SeoListingFieldKey,\n} from '@aglyn/aglyn/app-utils/seo-listing-fields'\nimport type {\n ConsoleProductCopyValues,\n ConsoleProductEditorZoneProps,\n ConsoleSeoFieldValues,\n} from '@aglyn/aglyn/plugin-manager/feature-plugins'\nimport { ScrollTable } from '@aglyn/shared-ui-jsx/components/scroll-table.component'\nimport {\n EntitlementUpsell,\n useCommerceEntitlement,\n} from './entitlement-gate.component'\nimport {\n MembersVideosField,\n PaidDownloadAddButton,\n PaidMediaProtection,\n} from './paid-media'\n\n/**\n * What each picker in this dialog will offer.\n *\n * Every one is a chooser rather than a list, so the ceiling is the number of\n * options a reader can meaningfully scan, and the walk that reaches it is\n * ordered by document name — a picker that silently omits an option is worse\n * than one that admits it stops, because the omission looks like the option\n * not existing.\n */\nconst CATEGORY_CEILING = 250\nconst RELATED_PRODUCT_CEILING = 300\nconst SUPPLIER_CEILING = 50\n\nexport interface ProductEditorDialogProps {\n hostId: string\n /** Product doc (with `$id`) to edit, `null` for a new product. */\n product: (CommerceModel.HostProduct & { $id: string }) | null\n /**\n * The listener that produced `product` has NOT been confirmed by the\n * server (AGL-1358). Required rather than optional on purpose: the\n * products listener lives in the parent hub card, so this dialog cannot\n * compute the verdict, and an optional prop a caller forgets is a guard\n * that is off while looking present.\n */\n seedFromCache: boolean\n /** That listener FAILED (`status === 'error'`). */\n seedUnreadable?: boolean\n open: boolean\n onClose: () => void\n}\n\n/**\n * The search listing fields this editor holds (AGL-2910): `product.seo`\n * carries a title and a description beside its share image, and nothing\n * else a listing zone may propose.\n */\nconst PRODUCT_SEO_LISTING_FIELDS: readonly Extract<SeoListingFieldKey, 'title' | 'description'>[] = [\n 'title',\n 'description',\n]\n\n/** A product nobody has saved yet, as the editor starts one. */\nfunction blankProduct(): CommerceModel.HostProduct {\n return {\n name: '',\n slug: '',\n type: 'physical',\n status: 'draft',\n variants: [{ id: 'default', priceUsd: 0 }],\n }\n}\n\n/** Stable key for matching variants across matrix regenerations. */\nfunction comboKey(options: Record<string, string> | undefined): string {\n return Object.entries(options ?? {})\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, value]) => `${name}:${value}`)\n .join('|')\n}\n\nfunction comboLabel(options: Record<string, string> | undefined): string {\n const values = Object.values(options ?? {})\n return values.length ? values.join(' / ') : 'Default'\n}\n\n/**\n * Products hub editor (AGL-279): the full catalog editor — basics,\n * media, tags, options → variants matrix, per-variant pricing/stock, and\n * SEO overrides. Saving denormalizes `priceUsd`/`inventory` from the\n * first variant so the legacy Product block + checkout API (AGL-90) keep\n * charging correctly without reading the variants array.\n */\nexport function ProductEditorDialog(props: ProductEditorDialogProps) {\n const { hostId, product, seedFromCache, seedUnreadable, open, onClose } =\n props\n\n /**\n * Field-level entitlement gates (AGL-2080). Both of these were fully\n * configurable by an unentitled org and refused only at checkout — by\n * `server/checkout.ts:149` for subscriptions and `:157` /\n * `cart-checkout.ts:156` for gift cards. The operator saw a saved product;\n * the buyer saw the refusal.\n *\n * `ready && !entitled`, never `!entitled`. `checkEntitlement(undefined)`\n * resolves the FREE tier rather than \"unknown\", so gating on the raw call\n * would disable these controls at a PAYING org for the render or two its\n * org doc is in flight. Erring open for that window costs nothing — the\n * server enforces regardless — while erring closed is a paying customer\n * told they cannot use what they bought.\n */\n const subs = useCommerceEntitlement(hostId, 'storefrontSubscriptions')\n const gifts = useCommerceEntitlement(hostId, 'giftCards')\n const subsLocked = subs.ready && !subs.entitled\n const giftsLocked = gifts.ready && !gifts.entitled\n const firestore = useFirestore()\n const createHostResource = useHostResourceApi()\n const { enqueueSnackbar } = useSnackbar()\n /**\n * The three pickers this dialog draws, read only once it is OPEN.\n *\n * `ProductEditorDialog` is rendered unconditionally by the products hub and\n * takes `open` as a prop, so its body runs on every render of that page. A\n * listener built here without the gate subscribes whether or not anyone\n * opens the editor, which charges every visit to the catalog for three\n * collections the visitor never sees.\n *\n * `null` is what `useFirestoreCollection` takes to mean \"do not subscribe\",\n * so the closed dialog costs nothing and the open one pays once.\n */\n const { data: categoryDocs } = useFirestoreCollection<any>(\n () =>\n open\n ? collectionCeiling(\n collection(firestore, 'hosts', hostId, 'productCategories'),\n CATEGORY_CEILING,\n )\n : null,\n [firestore, hostId, open],\n { idField: '$id' },\n )\n const { data: allProductDocs } = useFirestoreCollection<any>(\n () =>\n open\n ? collectionCeiling(\n collection(firestore, 'hosts', hostId, 'products'),\n RELATED_PRODUCT_CEILING,\n )\n : null,\n [firestore, hostId, open],\n { idField: '$id' },\n )\n const { data: supplierDocs } = useFirestoreCollection<any>(\n () =>\n open\n ? collectionCeiling(\n collection(firestore, 'hosts', hostId, 'suppliers'),\n SUPPLIER_CEILING,\n )\n : null,\n [firestore, hostId, open],\n { idField: '$id' },\n )\n const categories = useMemo(\n () => ceilingedWindow<any>(categoryDocs ?? undefined, CATEGORY_CEILING),\n [categoryDocs],\n )\n const relatedProducts = useMemo(\n () =>\n ceilingedWindow<any>(allProductDocs ?? undefined, RELATED_PRODUCT_CEILING),\n [allProductDocs],\n )\n const suppliers = useMemo(\n () => ceilingedWindow<any>(supplierDocs ?? undefined, SUPPLIER_CEILING),\n [supplierDocs],\n )\n\n const lifted = useMemo(\n () => (product ? CommerceModel.liftLegacyProduct(product) : null),\n [product],\n )\n const [draft, setDraft] = useState<CommerceModel.HostProduct | null>(null)\n const [slugTouched, setSlugTouched] = useState(false)\n // The console media browser is provided by the shell (AGL-395); opening it\n // resolves with the chosen asset (or null if cancelled).\n const { pickMedia } = useMediaPicker()\n const pick = useCallback(\n async (apply: (media: PickedMedia) => void) => {\n const media = await pickMedia?.()\n if (media) apply(media)\n },\n [pickMedia],\n )\n // Lazy-init per open; parent remounts via `key` on product change.\n const current: CommerceModel.HostProduct = draft ?? lifted ?? blankProduct()\n const update = (patch: Partial<CommerceModel.HostProduct>) =>\n setDraft({ ...current, ...patch })\n\n /** The shell's zone renderer (AGL-2910); `null` outside the console shell. */\n const WidgetSlot = useConsoleWidgetSlot()\n /**\n * A listing zone widget's proposal, staged into the draft like typing.\n * Functional, because a proposal can arrive after a generation finishes,\n * and a closure over the render that started it would put back every edit\n * made while it ran. Only the fields a product's listing holds are taken.\n */\n const proposeSeoValues = useCallback(\n (values: ConsoleSeoFieldValues) => {\n const staged: { title?: string; description?: string } = {}\n for (const field of PRODUCT_SEO_LISTING_FIELDS) {\n const value = values[field]\n if (typeof value === 'string') staged[field] = value\n }\n if (!Object.keys(staged).length) return\n setDraft((prior) => {\n const base = prior ?? lifted ?? blankProduct()\n return { ...base, seo: { ...base.seo, ...staged } }\n })\n },\n [lifted],\n )\n\n /**\n * The product zone's proposal (AGL-2916): copy staged into the draft like\n * typing, functional for the reason `proposeSeoValues` gives. Option names\n * go through `renameProductOptions`, so every variant keeps its price, SKU\n * and stock.\n */\n const proposeProductValues = useCallback(\n (values: ConsoleProductCopyValues) => {\n setDraft((prior) => {\n const base = prior ?? lifted ?? blankProduct()\n return { ...base, ...CommerceModel.productCopyPatch(base, values) }\n })\n },\n [lifted],\n )\n const zoneCategories = useMemo(\n () => categories.rows.map((category: any) => ({ id: String(category.$id), name: String(category.name ?? '') })),\n [categories.rows],\n )\n const zoneProduct: ConsoleProductEditorZoneProps['product'] = {\n id: product?.$id ?? null,\n name: current.name,\n type: current.type,\n description: String(current.description ?? ''),\n tags: current.tags ?? [],\n categoryIds: current.categoryIds ?? [],\n options: (current.options ?? []).map((option) => ({ name: option.name, values: option.values })),\n mediaUrls: current.mediaUrls ?? [],\n seoTitle: current.seo?.title ?? '',\n seoDescription: current.seo?.description ?? '',\n }\n\n const error = current.name ? CommerceModel.validateProduct(current) : null\n\n /**\n * Stock tracking is inert on a subscription-only product (AGL-1744) —\n * nothing decrements it on the first charge or on any renewal, so the\n * editor stops offering a number it cannot keep true. Existing\n * configuration is NOT discarded: the stored value stays on the document\n * (this save is a full replace of `current`, and `current` is untouched\n * here), stays visible in the disabled field, and becomes editable again\n * the moment Billing goes back to \"One-time purchase\" or \"Both\".\n */\n const stockApplies = CommerceModel.stockTrackingApplies(current)\n const strandedStock = stockApplies\n ? null\n : CommerceModel.productInventory(current)\n\n /**\n * The one destructive move, and the merchant makes it deliberately.\n *\n * Needed because the checkout gate is unchanged: a stored `0` on a\n * subscription-only product still 409s every new subscriber, and with the\n * field disabled that would be a trap with no way out. `inventoryByLocation`\n * goes with it — `adjustVariantInventory` re-sums the flat count from those\n * buckets (AGL-286), so leaving them would let a later restock resurrect a\n * count this just cleared. Keys are DELETED rather than set undefined; the\n * save is a client-direct `setDoc`, which rejects undefined values.\n */\n const handleClearStockTracking = () => {\n update({\n variants: current.variants.map((variant) => {\n const { inventoryByLocation: _perLocation, ...rest } = variant\n return { ...rest, inventory: null }\n }),\n })\n }\n\n const handleName = (name: string) =>\n update({\n name,\n ...(!product && !slugTouched ? { slug: CommerceModel.commerceSlug(name) } : {}),\n })\n\n const handleOptionsChange = useCallback(\n (index: number, patch: Partial<CommerceModel.ProductOption> | null) => {\n // A RENAME moves each variant's selection to the new name (AGL-3066).\n // Rebuilding the matrix matches variants by name and value, so under a\n // new name it finds none and replaces every variant, its id, price, SKU\n // and stock with them. Only a change of values rebuilds.\n if (\n patch &&\n current.options?.[index] &&\n Object.keys(patch).length === 1 &&\n typeof patch.name === 'string'\n ) {\n update(\n CommerceModel.renameProductOptions(\n current,\n current.options.map((option, at) => (at === index ? patch.name : option.name)),\n ),\n )\n return\n }\n const options = [...(current.options ?? [])]\n if (patch === null) options.splice(index, 1)\n else options[index] = { name: '', values: [], ...options[index], ...patch }\n // Regenerate the matrix, carrying data over by option-combo key so\n // edits to prices/SKUs survive option tweaks.\n const previous = new Map(\n current.variants.map((variant) => [comboKey(variant.options), variant]),\n )\n const fallback = current.variants[0]\n const variants = CommerceModel.expandVariantMatrix(options).map(\n (combo, comboIndex) => {\n const existing = previous.get(comboKey(combo))\n return (\n existing ?? {\n id: `v${Date.now().toString(36)}${comboIndex}`,\n options: combo,\n priceUsd: fallback?.priceUsd ?? 0,\n inventory: fallback?.inventory ?? null,\n }\n )\n },\n )\n update({ options, variants })\n },\n [current],\n )\n\n const handleVariantField = (\n index: number,\n field: keyof CommerceModel.ProductVariant,\n raw: string,\n ) => {\n const variants = [...current.variants]\n const numeric = ['priceUsd', 'compareAtPriceUsd', 'weightGrams']\n const value =\n field === 'inventory'\n ? raw.trim() === ''\n ? null\n : Math.max(0, Math.round(Number(raw)))\n : numeric.includes(field)\n ? raw.trim() === ''\n ? undefined\n : Number(raw)\n : raw\n variants[index] = { ...variants[index], [field]: value }\n if (\n value === undefined &&\n (field === 'compareAtPriceUsd' || field === 'weightGrams')\n ) {\n delete (variants[index] as any)[field]\n }\n update({ variants })\n }\n\n const handleSave = useCallback(async () => {\n if (!current.name.trim() || error) return\n const primaryVariant = current.variants[0]\n // JSON-safe base (no Firestore Timestamp — it won't survive the API\n // hop); millis fields are what the checkout + Product block read.\n /**\n * `$id` is dropped, not carried (AGL-1374).\n *\n * `current` is `draft ?? liftLegacyProduct(product)`, and the hub stamps\n * `$id` onto every row it lists (`{...liftLegacyProduct(p), $id: p.$id}`)\n * — a SYNTHETIC key `idField: '$id'` puts on the in-memory object, which\n * nothing persists. Spreading `current` carried it into the payload, and\n * this write is `merge: false`, so it was stored as a real field on every\n * product save. Nothing reads it; it is the listener's bookkeeping\n * leaking into storage, and once there no reader can tell it from a field\n * the editor meant to write. Excluding it also CLEANS the key off any\n * product a previous save corrupted, because a replacing write stores\n * exactly the payload.\n *\n * `product.$id` is still the doc path below — reading the synthetic key\n * is what it is for. Writing it is the bug.\n */\n const seeded = current as typeof current & { $id?: string }\n const { $id: _syntheticId, ...currentFields } = seeded\n const base = {\n ...currentFields,\n /*\n * `name` comes from `productSearchFields`, not from a bare assignment\n * (AGL-2501) — it returns the trimmed name ALONGSIDE the keys derived\n * from it, so the two cannot drift. Writing the name here and the keys\n * anywhere else is the shape that leaves a renamed product findable\n * only by what it used to be called.\n */\n ...CommerceModel.productSearchFields({\n name: current.name.trim().slice(0, 120),\n variants: current.variants,\n }),\n slug: current.slug || CommerceModel.commerceSlug(current.name),\n priceUsd: primaryVariant?.priceUsd ?? 0,\n inventory: CommerceModel.productInventory(current),\n imageUrl: current.mediaUrls?.[0] ?? current.imageUrl ?? null,\n updatedAtMs: Date.now(),\n }\n try {\n /**\n * Refuse an EDIT whose seed the server never confirmed (AGL-1358).\n *\n * `merge: false` — a genuine full-document replace, and the payload is\n * `{...current}`, which is `draft ?? lifted(product)`: every field the\n * dialog was seeded with, whether or not it was touched. So a cached\n * seed does not lose the one edit, it replaces the stored product with\n * the cache's whole picture of it — price, variants, stock, media,\n * status, SEO. Anything written since that snapshot, by a colleague or\n * by the checkout engine, is gone.\n *\n * Only the edit path is guarded. A NEW product goes through the\n * quota-enforcing resources API at a fresh uid and can overwrite\n * nothing; the first snapshot of any listener is `fromCache: true`, so\n * guarding a create would refuse a save that was never unsafe.\n *\n * The guard WRAPS the write: an early return is a shape you can keep\n * while losing the protection.\n */\n const verdict = await writeGuardedBySeed(\n {\n subject: 'product',\n unreadable: Boolean(product) && seedUnreadable,\n fromCache: Boolean(product) && seedFromCache,\n },\n async () => {\n if (product) {\n /**\n * RESERVATIONS ARE NOT THE EDITOR'S TO WRITE (AGL-2356).\n *\n * Checkout stores live stock holds in a `stockHolds` map on this\n * document, and this is a `merge: false` replace of a payload\n * built from the dialog's SEED. Left alone it would write whatever\n * that seed happened to carry, and both directions are wrong: a\n * seed taken before a shopper reached checkout erases a live\n * reservation and reopens the oversell for that session, and a\n * seed carrying a hold that has since settled resurrects a\n * reservation against stock that is already sold.\n *\n * So the field is dropped from the payload and re-read from the\n * server immediately before the write. One extra read on a product\n * save, in exchange for an editor that cannot invent or destroy a\n * reservation. The AGL-1358 seed guard above bounds how stale the\n * REST of this payload can be; it cannot help here, because a hold\n * legitimately appears seconds after a perfectly fresh seed.\n */\n const productRef = doc(\n firestore,\n 'hosts',\n hostId,\n 'products',\n product.$id,\n )\n const { stockHolds: _seededHolds, ...withoutHolds } =\n base as typeof base & { stockHolds?: Record<string, unknown> }\n const liveHolds = await getDoc(productRef)\n .then((snapshot) => snapshot.get('stockHolds'))\n .catch(() => undefined)\n // Edit stays client-direct (no quota consumed); full replace.\n await setDoc(\n productRef,\n {\n ...withoutHolds,\n ...(liveHolds ? { stockHolds: liveHolds } : {}),\n updatedAt: Timestamp.now(),\n },\n { merge: false },\n )\n } else {\n // New product rides the quota-enforcing resources API (AGL-473) —\n // it re-checks the `commerce` entitlement and productsPerHost.\n await createHostResource({\n hostId,\n resource: 'product',\n data: { ...base, createdAtMs: Date.now() },\n })\n }\n },\n )\n // A refusal leaves the editor open with every field as edited. Closing\n // it would discard the work AND look like a save that succeeded.\n if (!verdict.ok) {\n return void enqueueSnackbar(verdict.message, {\n variant: 'warning',\n persist: false,\n })\n }\n onClose()\n enqueueSnackbar('Product saved', { variant: 'success', persist: false })\n } catch (saveError: any) {\n console.error(saveError)\n enqueueSnackbar(saveError?.message ?? 'An error has occurred', {\n variant: 'error',\n allowDuplicate: true,\n })\n }\n }, [\n current,\n error,\n product,\n seedFromCache,\n seedUnreadable,\n firestore,\n hostId,\n createHostResource,\n onClose,\n enqueueSnackbar,\n ])\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>{product ? 'Edit product' : 'Add product'}</DialogTitle>\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2} sx={{ mt: 1 }}>\n <TextField\n label=\"Name\"\n value={current.name}\n onChange={(event) => handleName(event.target.value)}\n size=\"small\"\n autoFocus\n fullWidth\n />\n <TextField\n label=\"Slug\"\n value={current.slug}\n onChange={(event) => {\n setSlugTouched(true)\n update({ slug: CommerceModel.commerceSlug(event.target.value) })\n }}\n size=\"small\"\n fullWidth\n helperText={current.slug ? `/products/${current.slug}` : undefined}\n />\n </Stack>\n <Stack direction=\"row\" spacing={2}>\n <TextField\n label=\"Type\"\n value={current.type}\n onChange={(event) =>\n update({ type: event.target.value as CommerceModel.ProductType })\n }\n size=\"small\"\n select\n sx={{ minWidth: 140 }}\n >\n <MenuItem value=\"physical\">{'Physical'}</MenuItem>\n <MenuItem value=\"digital\">{'Digital'}</MenuItem>\n <MenuItem value=\"service\">{'Service'}</MenuItem>\n </TextField>\n <TextField\n label=\"Status\"\n value={current.status}\n onChange={(event) =>\n update({ status: event.target.value as CommerceModel.ProductStatus })\n }\n size=\"small\"\n select\n sx={{ minWidth: 140 }}\n >\n <MenuItem value=\"draft\">{'Draft'}</MenuItem>\n <MenuItem value=\"active\">{'Active'}</MenuItem>\n <MenuItem value=\"archived\">{'Archived'}</MenuItem>\n </TextField>\n {suppliers.rows.length > 0 ? (\n <TextField\n label=\"Supplier\"\n value={current.supplierId ?? ''}\n onChange={(event) =>\n update({ supplierId: event.target.value || undefined })\n }\n size=\"small\"\n select\n sx={{ minWidth: 160 }}\n helperText=\"Routes paid orders\"\n >\n <MenuItem value=\"\">{'None (self-fulfilled)'}</MenuItem>\n {suppliers.rows.map((supplier: any) => (\n <MenuItem key={supplier.$id} value={supplier.$id}>\n {supplier.name}\n </MenuItem>\n ))}\n </TextField>\n ) : null}\n </Stack>\n <TextField\n label=\"Description\"\n value={current.description ?? ''}\n onChange={(event) => update({ description: event.target.value })}\n size=\"small\"\n multiline\n minRows={2}\n />\n <Autocomplete\n multiple\n freeSolo\n options={[] as string[]}\n value={current.tags ?? []}\n onChange={(_event, tags) =>\n update({ tags: tags.map((tag) => String(tag).trim()).filter(Boolean) })\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Tags\"\n size=\"small\"\n placeholder=\"Type and press Enter\"\n />\n )}\n />\n {categories.rows.length > 0 ? (\n <Autocomplete\n multiple\n options={categories.rows}\n getOptionLabel={(category: any) => category.name}\n isOptionEqualToValue={(option: any, value: any) =>\n option.$id === value.$id\n }\n value={categories.rows.filter((category: any) =>\n (current.categoryIds ?? []).includes(category.$id),\n )}\n onChange={(_event, picked) =>\n update({\n categoryIds: picked.map((category: any) => category.$id),\n })\n }\n renderInput={(params) => (\n <TextField {...params} label=\"Categories\" size=\"small\" />\n )}\n />\n ) : null}\n {/*\n The product zone (AGL-2916), hosted like the listing zone below: a\n widget proposes copy from what this product says and shows, staged in\n the fields above like typing. Save product is still the only write.\n */}\n {WidgetSlot ? (\n <WidgetSlot\n slot=\"productEditor\"\n hostId={hostId}\n orgId={undefined}\n product={zoneProduct}\n categories={zoneCategories}\n proposeValues={proposeProductValues}\n />\n ) : null}\n\n <Divider textAlign=\"left\">{'Media'}</Divider>\n <Box sx={{ display: 'flex', gap: 1, flexWrap: 'wrap' }}>\n {(current.mediaUrls ?? []).map((url, index) => (\n <Box key={`${url}-${index}`} sx={{ position: 'relative' }}>\n <Box\n component=\"img\"\n src={url}\n alt=\"\"\n sx={{\n width: 72,\n height: 72,\n objectFit: 'cover',\n borderRadius: 1,\n border: 1,\n borderColor: 'divider',\n }}\n />\n <IconButton\n size=\"small\"\n aria-label=\"Remove image\"\n onClick={() =>\n update({\n mediaUrls: (current.mediaUrls ?? []).filter(\n (_item, itemIndex) => itemIndex !== index,\n ),\n })\n }\n sx={{\n position: 'absolute',\n top: -8,\n right: -8,\n bgcolor: 'background.paper',\n border: 1,\n borderColor: 'divider',\n p: 0.25,\n }}\n >\n {'✕'}\n </IconButton>\n </Box>\n ))}\n <Button\n size=\"small\"\n onClick={() =>\n void pick((media) =>\n update({\n mediaUrls: [...(current.mediaUrls ?? []), media.url],\n }),\n )\n }\n >\n {'Add image'}\n </Button>\n </Box>\n\n <Divider textAlign=\"left\">{'Options & variants'}</Divider>\n {(current.options ?? []).map((option, index) => (\n <Stack\n key={index}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'flex-start' }}\n >\n <TextField\n label=\"Option\"\n value={option.name}\n onChange={(event) =>\n handleOptionsChange(index, { name: event.target.value })\n }\n size=\"small\"\n sx={{ width: 160 }}\n placeholder=\"Size\"\n />\n <Autocomplete\n multiple\n freeSolo\n options={[] as string[]}\n value={option.values}\n onChange={(_event, values) =>\n handleOptionsChange(index, {\n values: values.map((value) => String(value).trim()).filter(Boolean),\n })\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Values\"\n size=\"small\"\n placeholder=\"S, M, L…\"\n />\n )}\n sx={{ flex: 1 }}\n />\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() => handleOptionsChange(index, null)}\n sx={{ mt: 0.5 }}\n >\n {'Remove'}\n </Button>\n </Stack>\n ))}\n {(current.options?.length ?? 0) < CommerceModel.COMMERCE_MAX_OPTIONS ? (\n <Button\n size=\"small\"\n sx={{ alignSelf: 'flex-start' }}\n onClick={() =>\n handleOptionsChange(current.options?.length ?? 0, {\n name: '',\n values: [],\n })\n }\n >\n {'Add option'}\n </Button>\n ) : null}\n <Box>\n <ScrollTable size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{'Variant'}</TableCell>\n <TableCell>{'Price ($)'}</TableCell>\n <TableCell>{'Compare-at'}</TableCell>\n <TableCell>{'SKU'}</TableCell>\n <TableCell>{'Barcode'}</TableCell>\n <TableCell>{'Stock'}</TableCell>\n <TableCell>{'Weight (g)'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {current.variants.map((variant, index) => (\n <TableRow key={variant.id}>\n <TableCell sx={{ whiteSpace: 'nowrap' }}>\n {comboLabel(variant.options)}\n </TableCell>\n <TableCell>\n <TextField\n value={variant.priceUsd ?? ''}\n onChange={(event) =>\n handleVariantField(index, 'priceUsd', event.target.value)\n }\n size=\"small\"\n sx={{ width: 88 }}\n // An empty price is marked (AGL-2916): a proposed\n // product arrives with none, and Save waits for one.\n error={!CommerceModel.variantHasPrice(variant)}\n placeholder=\"Set\"\n slotProps={{ htmlInput: { inputMode: 'decimal' } }}\n />\n </TableCell>\n <TableCell>\n <TextField\n value={variant.compareAtPriceUsd ?? ''}\n onChange={(event) =>\n handleVariantField(\n index,\n 'compareAtPriceUsd',\n event.target.value,\n )\n }\n size=\"small\"\n sx={{ width: 88 }}\n slotProps={{ htmlInput: { inputMode: 'decimal' } }}\n />\n </TableCell>\n <TableCell>\n <TextField\n value={variant.sku ?? ''}\n onChange={(event) =>\n handleVariantField(index, 'sku', event.target.value)\n }\n size=\"small\"\n sx={{ width: 110 }}\n />\n </TableCell>\n <TableCell>\n <TextField\n value={variant.barcode ?? ''}\n onChange={(event) =>\n handleVariantField(index, 'barcode', event.target.value)\n }\n size=\"small\"\n sx={{ width: 110 }}\n />\n </TableCell>\n <TableCell>\n <TextField\n value={variant.inventory ?? ''}\n placeholder={stockApplies ? '—' : 'n/a'}\n disabled={!stockApplies}\n onChange={(event) =>\n handleVariantField(index, 'inventory', event.target.value)\n }\n size=\"small\"\n sx={{ width: 72 }}\n slotProps={{\n htmlInput: {\n inputMode: 'numeric',\n 'aria-label': `Stock — ${comboLabel(variant.options)}`,\n },\n }}\n />\n </TableCell>\n <TableCell>\n <TextField\n value={variant.weightGrams ?? ''}\n onChange={(event) =>\n handleVariantField(index, 'weightGrams', event.target.value)\n }\n size=\"small\"\n sx={{ width: 88 }}\n slotProps={{ htmlInput: { inputMode: 'numeric' } }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </ScrollTable>\n </Box>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {stockApplies\n ? 'Blank stock = untracked; 0 shows sold out. The first variant’s ' +\n 'price feeds legacy Product blocks.'\n : 'Stock is not tracked on a digital or service subscription — ' +\n 'nothing decrements it, on the first charge or on any renewal. ' +\n 'A physical subscription decrements per cycle, and “Both — ' +\n 'buyer chooses” tracks the one-time sales. The first variant’s ' +\n 'price feeds legacy Product blocks.'}\n </Typography>\n {strandedStock != null ? (\n <Alert\n severity=\"warning\"\n action={\n <Button size=\"small\" onClick={handleClearStockTracking}>\n {'Clear stock'}\n </Button>\n }\n >\n {`This product still has stock set (${strandedStock}), but a ` +\n 'digital or service subscription never decrements it — not the ' +\n 'first charge, not any renewal — so the number will not change ' +\n 'on its own and does not cap subscribers. It is kept, not ' +\n 'deleted: a stored 0 still blocks new subscribers, and the ' +\n 'value becomes editable again if you switch Billing back to ' +\n 'one-time or “Both”, or the Type to physical.'}\n </Alert>\n ) : null}\n {/* One linked upsell for both locked selectors (AGL-2080). The\n helper text under each control names the plan, but a disabled\n MenuItem is only visible with the menu open and neither is a\n path anywhere — the retention directive wants the upgrade\n prominent and one-click, so the link lives here, beside the\n controls it unlocks. */}\n {subsLocked || giftsLocked ? (\n <EntitlementUpsell\n planLabel={undefined}\n upgradeHref={subsLocked ? subs.upgradeHref : gifts.upgradeHref}\n >\n {subsLocked && giftsLocked\n ? `Subscription products (${subs.planLabel ?? 'higher plan'}) ` +\n `and gift cards (${gifts.planLabel ?? 'higher plan'}) are ` +\n 'not on your plan. You can still save this product — those ' +\n 'two options stay locked until you upgrade.'\n : subsLocked\n ? `Subscription products are on ${subs.planLabel ?? 'a higher plan'}. ` +\n 'A subscription saved without it is refused at checkout, ' +\n 'so the option stays locked here instead.'\n : `Gift cards are on ${gifts.planLabel ?? 'a higher plan'}. ` +\n 'A gift-card product saved without it is refused at ' +\n 'checkout, so the option stays locked here instead.'}\n </EntitlementUpsell>\n ) : null}\n <Stack direction=\"row\" spacing={2}>\n <TextField\n label=\"When out of stock\"\n value={current.oversellPolicy ?? 'deny'}\n onChange={(event) =>\n update({\n oversellPolicy: event.target.value as 'deny' | 'backorder',\n })\n }\n size=\"small\"\n select\n sx={{ minWidth: 200 }}\n >\n <MenuItem value=\"deny\">{'Stop selling (sold out)'}</MenuItem>\n <MenuItem value=\"backorder\">{'Keep selling (backorder)'}</MenuItem>\n </TextField>\n <TextField\n label=\"Kind\"\n value={current.giftCard ? 'gift' : 'standard'}\n onChange={(event) =>\n update({ giftCard: event.target.value === 'gift' })\n }\n size=\"small\"\n select\n sx={{ minWidth: 130 }}\n helperText={\n giftsLocked\n ? `Gift cards are on ${gifts.planLabel ?? 'a higher plan'}`\n : 'Gift cards issue a code'\n }\n >\n <MenuItem value=\"standard\">{'Standard'}</MenuItem>\n {/* Disabled, never removed (AGL-2080). A product saved as a gift\n card before the plan lapsed still has `giftCard: true`, and a\n MUI select whose value is absent from its options renders\n blank — the next edit would silently rewrite the product to\n Standard. Locking the option refuses NEW configuration\n without rewriting existing data. */}\n <MenuItem value=\"gift\" disabled={giftsLocked}>\n {giftsLocked\n ? `Gift card — ${gifts.planLabel ?? 'upgrade'} plan`\n : 'Gift card'}\n </MenuItem>\n </TextField>\n <TextField\n label=\"Tax\"\n value={current.taxExempt ? 'exempt' : 'taxable'}\n onChange={(event) =>\n update({ taxExempt: event.target.value === 'exempt' })\n }\n size=\"small\"\n select\n sx={{ minWidth: 120 }}\n >\n <MenuItem value=\"taxable\">{'Taxable'}</MenuItem>\n <MenuItem value=\"exempt\">{'Tax exempt'}</MenuItem>\n </TextField>\n <TextField\n label=\"Low-stock alert at\"\n value={current.lowStockThreshold ?? ''}\n placeholder=\"Off\"\n disabled={!stockApplies}\n onChange={(event) => {\n const raw = event.target.value.trim()\n update({\n lowStockThreshold:\n raw === '' ? undefined : Math.max(0, Math.round(Number(raw))),\n })\n }}\n size=\"small\"\n sx={{ width: 140 }}\n slotProps={{ htmlInput: { inputMode: 'numeric' } }}\n helperText=\"Notifies managers\"\n />\n </Stack>\n\n <Stack direction=\"row\" spacing={2}>\n <TextField\n label=\"Billing\"\n value={\n current.subscription\n ? current.subscriptionOptional\n ? 'both'\n : current.subscription.interval\n : 'once'\n }\n onChange={(event) => {\n const value = event.target.value\n // \"Both\" (AGL-545): the PDP offers one-time OR subscribe at\n // the same price; the interval field beside picks the cadence.\n // Cleared keys are deleted (not set undefined) so the\n // client-direct setDoc on save never sees undefined values.\n const next = { ...current }\n if (value === 'once') {\n delete next.subscription\n } else {\n next.subscription = {\n ...(current.subscription ?? {}),\n interval:\n value === 'both'\n ? (current.subscription?.interval ?? 'month')\n : (value as 'month' | 'year'),\n }\n }\n if (value === 'both') next.subscriptionOptional = true\n else delete next.subscriptionOptional\n // setDraft directly: update() spreads the patch over\n // `current`, which would resurrect the deleted keys.\n setDraft(next)\n }}\n size=\"small\"\n select\n sx={{ minWidth: 180 }}\n helperText={\n subsLocked\n ? `Subscriptions are on ${subs.planLabel ?? 'a higher plan'}`\n : 'Subscriptions bill until canceled'\n }\n >\n <MenuItem value=\"once\">{'One-time purchase'}</MenuItem>\n {/* Same rule as the gift-card option above: disabled, not\n removed, so an existing subscription product keeps its\n interval instead of being silently reset to one-time. */}\n <MenuItem value=\"month\" disabled={subsLocked}>\n {'Monthly subscription'}\n </MenuItem>\n <MenuItem value=\"year\" disabled={subsLocked}>\n {'Yearly subscription'}\n </MenuItem>\n <MenuItem value=\"both\" disabled={subsLocked}>\n {'Both — buyer chooses'}\n </MenuItem>\n </TextField>\n {current.subscription && current.subscriptionOptional ? (\n <TextField\n label=\"Interval\"\n value={current.subscription.interval}\n onChange={(event) =>\n update({\n subscription: {\n ...current.subscription!,\n interval: event.target.value as 'month' | 'year',\n },\n })\n }\n size=\"small\"\n select\n sx={{ minWidth: 120 }}\n >\n <MenuItem value=\"month\">{'Monthly'}</MenuItem>\n <MenuItem value=\"year\">{'Yearly'}</MenuItem>\n </TextField>\n ) : null}\n {current.subscription ? (\n <TextField\n label=\"Free trial (days)\"\n placeholder=\"None\"\n value={current.subscription.trialDays ?? ''}\n onChange={(event) => {\n const raw = event.target.value.trim()\n update({\n subscription: {\n ...current.subscription!,\n ...(raw === ''\n ? { trialDays: undefined }\n : { trialDays: Math.max(1, Math.round(Number(raw))) }),\n },\n })\n }}\n size=\"small\"\n sx={{ width: 140 }}\n slotProps={{ htmlInput: { inputMode: 'numeric' } }}\n />\n ) : null}\n </Stack>\n {current.type === 'digital' ? (\n <>\n <Divider textAlign=\"left\">{'Digital delivery'}</Divider>\n {(current.digitalFiles ?? []).map((file, index) => (\n <Stack key={index} direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <Typography variant=\"body2\" sx={{ flex: 1 }} noWrap>\n {file.fileName}\n {file.version ? ` · v${file.version}` : ''}\n </Typography>\n <PaidMediaProtection\n url={file.url}\n hostId={hostId}\n productId={product?.$id}\n kind=\"download\"\n />\n <TextField\n label=\"Version\"\n value={file.version ?? ''}\n onChange={(event) => {\n const digitalFiles = [...(current.digitalFiles ?? [])]\n digitalFiles[index] = {\n ...file,\n version: event.target.value.slice(0, 20),\n }\n update({ digitalFiles })\n }}\n size=\"small\"\n sx={{ width: 100 }}\n />\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() =>\n update({\n digitalFiles: (current.digitalFiles ?? []).filter(\n (_item, itemIndex) => itemIndex !== index,\n ),\n })\n }\n >\n {'✕'}\n </Button>\n </Stack>\n ))}\n <Stack direction=\"row\" spacing={2}>\n {/* Paid downloads are private files delivered through expiring\n links (AGL-2847); adding one makes the file private. */}\n <PaidDownloadAddButton\n hostId={hostId}\n productId={product?.$id}\n onAdd={(file) =>\n update({ digitalFiles: [...(current.digitalFiles ?? []), file] })\n }\n />\n <TextField\n label=\"Download limit\"\n placeholder=\"Unlimited\"\n value={current.downloadLimit ?? ''}\n onChange={(event) => {\n const raw = event.target.value.trim()\n update({\n downloadLimit:\n raw === ''\n ? undefined\n : Math.max(1, Math.round(Number(raw))),\n })\n }}\n size=\"small\"\n sx={{ width: 140 }}\n slotProps={{ htmlInput: { inputMode: 'numeric' } }}\n helperText=\"Attempts per order\"\n />\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {'Buyers always download the current files — uploading a new ' +\n 'version re-delivers to everyone.'}\n </Typography>\n {/* Members videos are private files delivered through expiring\n links (AGL-2814); adding one makes the file private. */}\n <MembersVideosField\n hostId={hostId}\n productId={product?.$id}\n videos={current.gatedVideos ?? []}\n onChange={(gatedVideos) => update({ gatedVideos })}\n />\n </>\n ) : null}\n\n <Autocomplete\n multiple\n options={relatedProducts.rows.filter(\n (item: any) => !item.deletedAt && item.$id !== product?.$id,\n )}\n getOptionLabel={(item: any) => item.name ?? item.$id}\n isOptionEqualToValue={(option: any, value: any) =>\n option.$id === value.$id\n }\n value={relatedProducts.rows.filter((item: any) =>\n (current.relatedProductIds ?? []).includes(item.$id),\n )}\n onChange={(_event, picked) =>\n update({\n relatedProductIds: picked.map((item: any) => item.$id),\n })\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Related products (upsells)\"\n size=\"small\"\n helperText=\"Shown by the Related products block; blank falls back to frequently-bought-together\"\n />\n )}\n />\n\n <Divider textAlign=\"left\">{'Search engine listing'}</Divider>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n <TextField\n label=\"SEO title\"\n value={current.seo?.title ?? ''}\n onChange={(event) =>\n update({ seo: { ...current.seo, title: event.target.value } })\n }\n // The counts every search listing editor prints (AGL-2910): what a\n // search result shows before it truncates.\n helperText={seoListingFieldCount('title', current.seo?.title)}\n error={seoListingFieldTooLong('title', current.seo?.title)}\n size=\"small\"\n fullWidth\n />\n <Button\n size=\"small\"\n onClick={() =>\n void pick((media) =>\n update({ seo: { ...current.seo, imageUrl: media.url } }),\n )\n }\n >\n {current.seo?.imageUrl ? 'Change OG image' : 'OG image'}\n </Button>\n </Stack>\n <TextField\n label=\"SEO description\"\n value={current.seo?.description ?? ''}\n onChange={(event) =>\n update({ seo: { ...current.seo, description: event.target.value } })\n }\n helperText={seoListingFieldCount('description', current.seo?.description)}\n error={seoListingFieldTooLong('description', current.seo?.description)}\n size=\"small\"\n multiline\n minRows={2}\n />\n {/*\n The search listing zone (AGL-2910), hosted here through the shell's\n renderer: a plugin's dialog cannot mount the console's slot itself.\n A widget proposes a title and a description from what this product\n says; they are staged in the fields above like typing, and Save\n product is still the only write.\n */}\n {WidgetSlot ? (\n <WidgetSlot\n slot=\"seoFields\"\n hostId={hostId}\n orgId={undefined}\n orgSlug=\"\"\n subject={{\n kind: 'product',\n id: product?.$id ?? null,\n name: current.name,\n description: String(current.description ?? ''),\n }}\n fields={PRODUCT_SEO_LISTING_FIELDS}\n values={{\n title: current.seo?.title ?? '',\n description: current.seo?.description ?? '',\n }}\n hasImage={Boolean(current.seo?.imageUrl)}\n proposeValues={proposeSeoValues}\n />\n ) : null}\n\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n {product?.$id ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`id: ${product.$id}`}\n </Typography>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{'Cancel'}</Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={!current.name.trim() || Boolean(error)}\n onClick={handleSave}\n >\n {'Save product'}\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\nProductEditorDialog.displayName = 'ProductEditorDialog'\n\nexport default ProductEditorDialog\n"],"names":["CommerceModel","useSnackbar","Timestamp","Alert","Autocomplete","Box","Button","Dialog","DialogActions","DialogContent","DialogTitle","Divider","IconButton","MenuItem","Stack","TableBody","TableCell","TableHead","TableRow","TextField","Typography","collection","doc","getDoc","setDoc","useCallback","useMemo","useState","ceilingedWindow","collectionCeiling","useFirestore","useFirestoreCollection","useHostResourceApi","writeGuardedBySeed","useMediaPicker","useConsoleWidgetSlot","seoListingFieldCount","seoListingFieldTooLong","ScrollTable","EntitlementUpsell","useCommerceEntitlement","MembersVideosField","PaidDownloadAddButton","PaidMediaProtection","CATEGORY_CEILING","RELATED_PRODUCT_CEILING","SUPPLIER_CEILING","PRODUCT_SEO_LISTING_FIELDS","blankProduct","name","slug","type","status","variants","id","priceUsd","comboKey","options","Object","entries","sort","a","b","localeCompare","map","value","join","comboLabel","values","length","ProductEditorDialog","props","draft","current","subs","gifts","hostId","product","seedFromCache","seedUnreadable","open","onClose","subsLocked","ready","entitled","giftsLocked","firestore","createHostResource","enqueueSnackbar","data","categoryDocs","idField","allProductDocs","supplierDocs","categories","undefined","relatedProducts","suppliers","lifted","liftLegacyProduct","setDraft","slugTouched","setSlugTouched","pickMedia","pick","apply","media","update","patch","WidgetSlot","proposeSeoValues","staged","field","keys","prior","base","seo","proposeProductValues","productCopyPatch","zoneCategories","rows","category","String","$id","zoneProduct","description","tags","categoryIds","option","mediaUrls","seoTitle","title","seoDescription","error","validateProduct","stockApplies","stockTrackingApplies","strandedStock","productInventory","handleClearStockTracking","variant","inventoryByLocation","_perLocation","rest","inventory","handleName","commerceSlug","handleOptionsChange","index","renameProductOptions","at","splice","previous","Map","fallback","expandVariantMatrix","combo","comboIndex","existing","get","Date","now","toString","handleVariantField","raw","numeric","trim","Math","max","round","Number","includes","handleSave","primaryVariant","seeded","_syntheticId","currentFields","productSearchFields","slice","imageUrl","updatedAtMs","verdict","subject","unreadable","Boolean","fromCache","productRef","stockHolds","_seededHolds","withoutHolds","liveHolds","then","snapshot","catch","updatedAt","merge","resource","createdAtMs","ok","message","persist","saveError","console","allowDuplicate","maxWidth","fullWidth","sx","display","flexDirection","gap","direction","xs","sm","spacing","mt","label","onChange","event","target","size","autoFocus","helperText","select","minWidth","supplierId","supplier","multiline","minRows","multiple","freeSolo","_event","tag","filter","renderInput","params","placeholder","getOptionLabel","isOptionEqualToValue","picked","slot","orgId","proposeValues","textAlign","flexWrap","url","position","component","src","alt","width","height","objectFit","borderRadius","border","borderColor","aria-label","onClick","_item","itemIndex","top","right","bgcolor","p","alignItems","flex","color","COMMERCE_MAX_OPTIONS","alignSelf","whiteSpace","variantHasPrice","slotProps","htmlInput","inputMode","compareAtPriceUsd","sku","barcode","disabled","weightGrams","severity","action","planLabel","upgradeHref","oversellPolicy","giftCard","taxExempt","lowStockThreshold","subscription","subscriptionOptional","interval","next","trialDays","digitalFiles","file","noWrap","fileName","version","productId","kind","onAdd","downloadLimit","videos","gatedVideos","item","deletedAt","relatedProductIds","orgSlug","fields","hasImage","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ProductsHubCardProps {
|
|
2
|
+
hostId: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Products hub v1 (AGL-279): the catalog manager replacing the Commerce
|
|
6
|
+
* Starter card — search + status filter over `hosts/{hostId}/products`,
|
|
7
|
+
* full editor dialog, duplicate, archive/activate, soft delete (past
|
|
8
|
+
* order rows keep resolving). Product cap (`productsPerHost`, AGL-278)
|
|
9
|
+
* gated here on create/duplicate/import (AGL-471); server-side
|
|
10
|
+
* enforcement of the client-write path rides AGL-473.
|
|
11
|
+
*/
|
|
12
|
+
export declare function ProductsHubCard(props: ProductsHubCardProps): import("react").JSX.Element;
|
|
13
|
+
export declare namespace ProductsHubCard {
|
|
14
|
+
var displayName: string;
|
|
15
|
+
}
|
|
16
|
+
export default ProductsHubCard;
|