@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,300 @@
|
|
|
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, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
import { CardDisplay } from "@aglyn/shared-ui-jsx";
|
|
20
|
+
import { useSnackbar } from "@aglyn/shared-ui-snackstack";
|
|
21
|
+
import { Button, FormControlLabel, MenuItem, Stack, Switch, TextField, Typography } from "@mui/material";
|
|
22
|
+
import { doc, setDoc } from "firebase/firestore";
|
|
23
|
+
import { useCallback, useState } from "react";
|
|
24
|
+
import { useFirestore } from "@aglyn/tenant-feature-instance";
|
|
25
|
+
import { useFirestoreDoc, writeGuardedBySeed } from "@aglyn/tenant-feature-instance";
|
|
26
|
+
import { hostPublicOrigin, pluginDocsHelp } from "@aglyn/aglyn";
|
|
27
|
+
/**
|
|
28
|
+
* Store settings (AGL-295) on `hosts/{hostId}/settings/store`: the PDP
|
|
29
|
+
* template screen (drives /products/{slug}), currency display, checkout
|
|
30
|
+
* preferences, and receipt branding. Tax and shipping have their own
|
|
31
|
+
* cards; store password/maintenance live in Site Protection.
|
|
32
|
+
*/ export function StoreSettingsCard(props) {
|
|
33
|
+
var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _current_pdpScreenId, _current_collectionScreenId, _current_currency, _current_termsUrl, _current_receiptFooter;
|
|
34
|
+
const { hostId } = props;
|
|
35
|
+
const firestore = useFirestore();
|
|
36
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
37
|
+
const { data: store, status: storeStatus, /**
|
|
38
|
+
* The settings doc this form is seeded from is unconfirmed by the server
|
|
39
|
+
* (AGL-1358). `current` is `draft ?? {…store}` and the save writes all
|
|
40
|
+
* six keys, so `merge: true` protects only the tax and shipping maps that
|
|
41
|
+
* belong to other cards — never this card's own fields. Against a cached
|
|
42
|
+
* read, changing the currency rewrites `guestCheckout`, and the two
|
|
43
|
+
* template ids fall back to `|| null`, which is how a storefront's
|
|
44
|
+
* product and collection URLs start returning 404.
|
|
45
|
+
*/ fromCache: storeFromCache } = useFirestoreDoc(()=>doc(firestore, 'hosts', hostId, 'settings', 'store'), [
|
|
46
|
+
firestore,
|
|
47
|
+
hostId
|
|
48
|
+
]);
|
|
49
|
+
const { data: host } = useFirestoreDoc(()=>doc(firestore, 'hosts', hostId), [
|
|
50
|
+
firestore,
|
|
51
|
+
hostId
|
|
52
|
+
]);
|
|
53
|
+
const [draft, setDraft] = useState(null);
|
|
54
|
+
const current = draft != null ? draft : {
|
|
55
|
+
pdpScreenId: (_ref = store == null ? void 0 : store.pdpScreenId) != null ? _ref : '',
|
|
56
|
+
collectionScreenId: (_ref1 = store == null ? void 0 : store.collectionScreenId) != null ? _ref1 : '',
|
|
57
|
+
currency: (_ref2 = store == null ? void 0 : store.currency) != null ? _ref2 : 'USD',
|
|
58
|
+
guestCheckout: (store == null ? void 0 : store.guestCheckout) !== false,
|
|
59
|
+
termsUrl: (_ref3 = store == null ? void 0 : store.termsUrl) != null ? _ref3 : '',
|
|
60
|
+
receiptFooter: (_ref4 = store == null ? void 0 : store.receiptFooter) != null ? _ref4 : ''
|
|
61
|
+
};
|
|
62
|
+
const update = (patch)=>setDraft(_extends({}, current, patch));
|
|
63
|
+
/**
|
|
64
|
+
* Google Merchant Center feed address (AGL-2249).
|
|
65
|
+
*
|
|
66
|
+
* `server/feed.ts` has served this since AGL-299, and the only place the
|
|
67
|
+
* URL was ever written down was that file's own docblock — so the feature
|
|
68
|
+
* was built, deployed, and undiscoverable. A feed nobody can find is a
|
|
69
|
+
* shopping channel nobody switches on.
|
|
70
|
+
*
|
|
71
|
+
* Through `hostPublicOrigin` rather than a hand-built string, because a
|
|
72
|
+
* store on a custom domain must be told ITS name: the feed's `<link>`
|
|
73
|
+
* elements are built from the request host, so submitting the `.aglyn.app`
|
|
74
|
+
* address for a site that serves on `shop.example.com` would put the wrong
|
|
75
|
+
* domain on every item in Merchant Center.
|
|
76
|
+
*
|
|
77
|
+
* Undefined until the host doc lands, and undefined forever for a host with
|
|
78
|
+
* neither a cname nor a subdomain — `hostPublicOrigin` returns undefined
|
|
79
|
+
* rather than a half-built URL, and a copyable half-URL is worse than none.
|
|
80
|
+
*/ const feedUrl = host ? (()=>{
|
|
81
|
+
const origin = hostPublicOrigin(host);
|
|
82
|
+
return origin ? `${origin}/api/commerce/feed?hostId=${hostId}` : undefined;
|
|
83
|
+
})() : undefined;
|
|
84
|
+
// Host screen directory: {screenId: path} (AGL-292 template pick).
|
|
85
|
+
const screenEntries = Object.entries((_ref5 = host == null ? void 0 : host.screens) != null ? _ref5 : {}).sort(([, a], [, b])=>String(a).localeCompare(String(b)));
|
|
86
|
+
const handleSave = useCallback(async ()=>{
|
|
87
|
+
/**
|
|
88
|
+
* Refuse a save whose seed the server never confirmed (AGL-1358).
|
|
89
|
+
*
|
|
90
|
+
* There is no create path to exempt, and that is deliberate rather than
|
|
91
|
+
* an oversight: unlike a new row at a fresh uid, this writes a FIXED
|
|
92
|
+
* document path, so the all-defaults `current` produced when the cache
|
|
93
|
+
* has never seen this doc is not the harmless blank a fresh uid would
|
|
94
|
+
* be. It would put `USD`, guest checkout on and two null template ids
|
|
95
|
+
* over whatever the server really holds.
|
|
96
|
+
*
|
|
97
|
+
* The guard WRAPS the write — an early return is a shape you can keep
|
|
98
|
+
* while losing the protection.
|
|
99
|
+
*/ const verdict = await writeGuardedBySeed({
|
|
100
|
+
subject: 'store settings',
|
|
101
|
+
unreadable: storeStatus === 'error',
|
|
102
|
+
fromCache: storeFromCache
|
|
103
|
+
}, async ()=>{
|
|
104
|
+
var _current_currency;
|
|
105
|
+
await setDoc(doc(firestore, 'hosts', hostId, 'settings', 'store'), {
|
|
106
|
+
pdpScreenId: current.pdpScreenId || null,
|
|
107
|
+
collectionScreenId: current.collectionScreenId || null,
|
|
108
|
+
currency: (_current_currency = current.currency) != null ? _current_currency : 'USD',
|
|
109
|
+
guestCheckout: current.guestCheckout !== false,
|
|
110
|
+
termsUrl: current.termsUrl || null,
|
|
111
|
+
receiptFooter: current.receiptFooter || null
|
|
112
|
+
}, {
|
|
113
|
+
merge: true
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
// Before `setDraft(null)`, so a refusal keeps every typed value on
|
|
117
|
+
// screen. A save that silently does nothing sends the user back to
|
|
118
|
+
// retype a form that will be refused again just as quietly.
|
|
119
|
+
if (!verdict.ok) {
|
|
120
|
+
return void enqueueSnackbar(verdict.message, {
|
|
121
|
+
variant: 'warning',
|
|
122
|
+
persist: false
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
setDraft(null);
|
|
126
|
+
enqueueSnackbar('Store settings saved', {
|
|
127
|
+
variant: 'success',
|
|
128
|
+
persist: false
|
|
129
|
+
});
|
|
130
|
+
}, [
|
|
131
|
+
current,
|
|
132
|
+
firestore,
|
|
133
|
+
hostId,
|
|
134
|
+
enqueueSnackbar,
|
|
135
|
+
storeStatus,
|
|
136
|
+
storeFromCache
|
|
137
|
+
]);
|
|
138
|
+
return /*#__PURE__*/ _jsx(CardDisplay, {
|
|
139
|
+
header: 'Store settings',
|
|
140
|
+
help: pluginDocsHelp('commerce'),
|
|
141
|
+
contentGutterX: true,
|
|
142
|
+
contentGutterY: true,
|
|
143
|
+
children: /*#__PURE__*/ _jsxs(Stack, {
|
|
144
|
+
spacing: 1.5,
|
|
145
|
+
children: [
|
|
146
|
+
/*#__PURE__*/ _jsxs(TextField, {
|
|
147
|
+
label: "Product page template",
|
|
148
|
+
value: (_current_pdpScreenId = current.pdpScreenId) != null ? _current_pdpScreenId : '',
|
|
149
|
+
onChange: (event)=>update({
|
|
150
|
+
pdpScreenId: event.target.value
|
|
151
|
+
}),
|
|
152
|
+
size: "small",
|
|
153
|
+
select: true,
|
|
154
|
+
helperText: 'Screen rendered at /products/{slug} — design it in the ' + 'besigner with the Product detail block and {{product.*}} tokens.',
|
|
155
|
+
children: [
|
|
156
|
+
/*#__PURE__*/ _jsx(MenuItem, {
|
|
157
|
+
value: "",
|
|
158
|
+
children: 'None (product URLs 404)'
|
|
159
|
+
}),
|
|
160
|
+
screenEntries.map(([screenId, path])=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
161
|
+
value: screenId,
|
|
162
|
+
children: `/${path === '/' ? '' : path}`
|
|
163
|
+
}, screenId))
|
|
164
|
+
]
|
|
165
|
+
}),
|
|
166
|
+
/*#__PURE__*/ _jsxs(TextField, {
|
|
167
|
+
label: "Collection page template",
|
|
168
|
+
value: (_current_collectionScreenId = current.collectionScreenId) != null ? _current_collectionScreenId : '',
|
|
169
|
+
onChange: (event)=>update({
|
|
170
|
+
collectionScreenId: event.target.value
|
|
171
|
+
}),
|
|
172
|
+
size: "small",
|
|
173
|
+
select: true,
|
|
174
|
+
helperText: 'Screen rendered at /collections/{slug} — drop a Product grid ' + 'with source "A collection" and {{collection.*}} tokens.',
|
|
175
|
+
children: [
|
|
176
|
+
/*#__PURE__*/ _jsx(MenuItem, {
|
|
177
|
+
value: "",
|
|
178
|
+
children: 'None (collection URLs 404)'
|
|
179
|
+
}),
|
|
180
|
+
screenEntries.map(([screenId, path])=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
181
|
+
value: screenId,
|
|
182
|
+
children: `/${path === '/' ? '' : path}`
|
|
183
|
+
}, screenId))
|
|
184
|
+
]
|
|
185
|
+
}),
|
|
186
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
187
|
+
label: "Currency",
|
|
188
|
+
value: (_current_currency = current.currency) != null ? _current_currency : 'USD',
|
|
189
|
+
onChange: (event)=>update({
|
|
190
|
+
currency: event.target.value
|
|
191
|
+
}),
|
|
192
|
+
size: "small",
|
|
193
|
+
select: true,
|
|
194
|
+
sx: {
|
|
195
|
+
maxWidth: 200
|
|
196
|
+
},
|
|
197
|
+
helperText: "Charges settle in USD; more currencies are coming",
|
|
198
|
+
children: /*#__PURE__*/ _jsx(MenuItem, {
|
|
199
|
+
value: "USD",
|
|
200
|
+
children: 'USD ($)'
|
|
201
|
+
})
|
|
202
|
+
}),
|
|
203
|
+
/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
204
|
+
control: /*#__PURE__*/ _jsx(Switch, {
|
|
205
|
+
size: "small",
|
|
206
|
+
checked: current.guestCheckout !== false,
|
|
207
|
+
onChange: (event)=>update({
|
|
208
|
+
guestCheckout: event.target.checked
|
|
209
|
+
})
|
|
210
|
+
}),
|
|
211
|
+
label: "Allow guest checkout (no account required)"
|
|
212
|
+
}),
|
|
213
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
214
|
+
label: "Terms URL",
|
|
215
|
+
value: (_current_termsUrl = current.termsUrl) != null ? _current_termsUrl : '',
|
|
216
|
+
onChange: (event)=>update({
|
|
217
|
+
termsUrl: event.target.value
|
|
218
|
+
}),
|
|
219
|
+
size: "small",
|
|
220
|
+
placeholder: "/terms",
|
|
221
|
+
helperText: "Linked from checkout when set"
|
|
222
|
+
}),
|
|
223
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
224
|
+
label: "Receipt footer",
|
|
225
|
+
value: (_current_receiptFooter = current.receiptFooter) != null ? _current_receiptFooter : '',
|
|
226
|
+
onChange: (event)=>update({
|
|
227
|
+
receiptFooter: event.target.value
|
|
228
|
+
}),
|
|
229
|
+
size: "small",
|
|
230
|
+
multiline: true,
|
|
231
|
+
minRows: 2,
|
|
232
|
+
placeholder: "Thanks for supporting our shop!"
|
|
233
|
+
}),
|
|
234
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
235
|
+
variant: "caption",
|
|
236
|
+
color: "text.secondary",
|
|
237
|
+
children: 'Password protection and maintenance mode live under Site ' + 'Protection.'
|
|
238
|
+
}),
|
|
239
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
240
|
+
variant: "contained",
|
|
241
|
+
color: "primary",
|
|
242
|
+
size: "small",
|
|
243
|
+
disabled: !draft,
|
|
244
|
+
onClick: handleSave,
|
|
245
|
+
sx: {
|
|
246
|
+
alignSelf: 'flex-start'
|
|
247
|
+
},
|
|
248
|
+
children: 'Save store settings'
|
|
249
|
+
}),
|
|
250
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
251
|
+
spacing: 0.5,
|
|
252
|
+
children: [
|
|
253
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
254
|
+
variant: "subtitle2",
|
|
255
|
+
children: 'Product feed'
|
|
256
|
+
}),
|
|
257
|
+
feedUrl ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
258
|
+
children: [
|
|
259
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
260
|
+
label: "Google Merchant Center feed URL",
|
|
261
|
+
value: feedUrl,
|
|
262
|
+
size: "small",
|
|
263
|
+
slotProps: {
|
|
264
|
+
input: {
|
|
265
|
+
readOnly: true
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
onFocus: (event)=>event.target.select(),
|
|
269
|
+
helperText: 'Paste this into Merchant Center → Products → Feeds as a ' + 'scheduled fetch. It lists every active product with price ' + 'and availability, and refreshes itself.'
|
|
270
|
+
}),
|
|
271
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
272
|
+
size: "small",
|
|
273
|
+
sx: {
|
|
274
|
+
alignSelf: 'flex-start'
|
|
275
|
+
},
|
|
276
|
+
onClick: ()=>{
|
|
277
|
+
var _navigator_clipboard;
|
|
278
|
+
void ((_navigator_clipboard = navigator.clipboard) == null ? void 0 : _navigator_clipboard.writeText(feedUrl).then(()=>enqueueSnackbar('Feed URL copied', {
|
|
279
|
+
variant: 'success',
|
|
280
|
+
persist: false
|
|
281
|
+
})));
|
|
282
|
+
},
|
|
283
|
+
children: 'Copy feed URL'
|
|
284
|
+
})
|
|
285
|
+
]
|
|
286
|
+
}) : /*#__PURE__*/ _jsx(Typography, {
|
|
287
|
+
variant: "body2",
|
|
288
|
+
color: "text.secondary",
|
|
289
|
+
children: 'Publish this site to a subdomain or custom domain to get its ' + 'Google Merchant Center feed URL.'
|
|
290
|
+
})
|
|
291
|
+
]
|
|
292
|
+
})
|
|
293
|
+
]
|
|
294
|
+
})
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
StoreSettingsCard.displayName = 'StoreSettingsCard';
|
|
298
|
+
export default StoreSettingsCard;
|
|
299
|
+
|
|
300
|
+
//# sourceMappingURL=store-settings-card.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/components/console/store-settings-card.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 { CardDisplay } from '@aglyn/shared-ui-jsx'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport {\n Button,\n FormControlLabel,\n MenuItem,\n Stack,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport { doc, setDoc } from 'firebase/firestore'\nimport { useCallback, useState } from 'react'\nimport { useFirestore } from '@aglyn/tenant-feature-instance'\nimport {\n useFirestoreDoc,\n writeGuardedBySeed,\n} from '@aglyn/tenant-feature-instance'\nimport { hostPublicOrigin, pluginDocsHelp } from '@aglyn/aglyn'\n\nexport interface StoreSettingsCardProps {\n hostId: string\n}\n\ninterface StoreSettings {\n /** Screen rendered for /products/{slug} with product tokens (AGL-292). */\n pdpScreenId?: string\n /** Screen rendered for /collections/{slug} (AGL-298). */\n collectionScreenId?: string\n currency?: string\n guestCheckout?: boolean\n termsUrl?: string\n receiptFooter?: string\n}\n\n/**\n * Store settings (AGL-295) on `hosts/{hostId}/settings/store`: the PDP\n * template screen (drives /products/{slug}), currency display, checkout\n * preferences, and receipt branding. Tax and shipping have their own\n * cards; store password/maintenance live in Site Protection.\n */\nexport function StoreSettingsCard(props: StoreSettingsCardProps) {\n const { hostId } = props\n const firestore = useFirestore()\n const { enqueueSnackbar } = useSnackbar()\n const {\n data: store,\n status: storeStatus,\n /**\n * The settings doc this form is seeded from is unconfirmed by the server\n * (AGL-1358). `current` is `draft ?? {…store}` and the save writes all\n * six keys, so `merge: true` protects only the tax and shipping maps that\n * belong to other cards — never this card's own fields. Against a cached\n * read, changing the currency rewrites `guestCheckout`, and the two\n * template ids fall back to `|| null`, which is how a storefront's\n * product and collection URLs start returning 404.\n */\n fromCache: storeFromCache,\n } = useFirestoreDoc<any>(\n () => doc(firestore, 'hosts', hostId, 'settings', 'store'),\n [firestore, hostId],\n )\n const { data: host } = useFirestoreDoc<any>(\n () => doc(firestore, 'hosts', hostId),\n [firestore, hostId],\n )\n const [draft, setDraft] = useState<StoreSettings | null>(null)\n const current: StoreSettings = draft ?? {\n pdpScreenId: store?.pdpScreenId ?? '',\n collectionScreenId: store?.collectionScreenId ?? '',\n currency: store?.currency ?? 'USD',\n guestCheckout: store?.guestCheckout !== false,\n termsUrl: store?.termsUrl ?? '',\n receiptFooter: store?.receiptFooter ?? '',\n }\n const update = (patch: Partial<StoreSettings>) =>\n setDraft({ ...current, ...patch })\n\n /**\n * Google Merchant Center feed address (AGL-2249).\n *\n * `server/feed.ts` has served this since AGL-299, and the only place the\n * URL was ever written down was that file's own docblock — so the feature\n * was built, deployed, and undiscoverable. A feed nobody can find is a\n * shopping channel nobody switches on.\n *\n * Through `hostPublicOrigin` rather than a hand-built string, because a\n * store on a custom domain must be told ITS name: the feed's `<link>`\n * elements are built from the request host, so submitting the `.aglyn.app`\n * address for a site that serves on `shop.example.com` would put the wrong\n * domain on every item in Merchant Center.\n *\n * Undefined until the host doc lands, and undefined forever for a host with\n * neither a cname nor a subdomain — `hostPublicOrigin` returns undefined\n * rather than a half-built URL, and a copyable half-URL is worse than none.\n */\n const feedUrl = host\n ? (() => {\n const origin = hostPublicOrigin(host)\n return origin\n ? `${origin}/api/commerce/feed?hostId=${hostId}`\n : undefined\n })()\n : undefined\n\n // Host screen directory: {screenId: path} (AGL-292 template pick).\n const screenEntries = Object.entries(\n (host?.screens ?? {}) as Record<string, string>,\n ).sort(([, a], [, b]) => String(a).localeCompare(String(b)))\n\n const handleSave = useCallback(async () => {\n /**\n * Refuse a save whose seed the server never confirmed (AGL-1358).\n *\n * There is no create path to exempt, and that is deliberate rather than\n * an oversight: unlike a new row at a fresh uid, this writes a FIXED\n * document path, so the all-defaults `current` produced when the cache\n * has never seen this doc is not the harmless blank a fresh uid would\n * be. It would put `USD`, guest checkout on and two null template ids\n * over whatever the server really holds.\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: 'store settings',\n unreadable: storeStatus === 'error',\n fromCache: storeFromCache,\n },\n async () => {\n await setDoc(\n doc(firestore, 'hosts', hostId, 'settings', 'store'),\n {\n pdpScreenId: current.pdpScreenId || null,\n collectionScreenId: current.collectionScreenId || null,\n currency: current.currency ?? 'USD',\n guestCheckout: current.guestCheckout !== false,\n termsUrl: current.termsUrl || null,\n receiptFooter: current.receiptFooter || null,\n },\n { merge: true },\n )\n },\n )\n // Before `setDraft(null)`, so a refusal keeps every typed value on\n // screen. A save that silently does nothing sends the user back to\n // retype a form that will be refused again just as quietly.\n if (!verdict.ok) {\n return void enqueueSnackbar(verdict.message, {\n variant: 'warning',\n persist: false,\n })\n }\n setDraft(null)\n enqueueSnackbar('Store settings saved', {\n variant: 'success',\n persist: false,\n })\n }, [current, firestore, hostId, enqueueSnackbar, storeStatus, storeFromCache])\n\n return (\n <CardDisplay\n header={'Store settings'}\n help={pluginDocsHelp('commerce')}\n contentGutterX\n contentGutterY\n >\n <Stack spacing={1.5}>\n <TextField\n label=\"Product page template\"\n value={current.pdpScreenId ?? ''}\n onChange={(event) => update({ pdpScreenId: event.target.value })}\n size=\"small\"\n select\n helperText={\n 'Screen rendered at /products/{slug} — design it in the ' +\n 'besigner with the Product detail block and {{product.*}} tokens.'\n }\n >\n <MenuItem value=\"\">{'None (product URLs 404)'}</MenuItem>\n {screenEntries.map(([screenId, path]) => (\n <MenuItem key={screenId} value={screenId}>\n {`/${path === '/' ? '' : path}`}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n label=\"Collection page template\"\n value={current.collectionScreenId ?? ''}\n onChange={(event) =>\n update({ collectionScreenId: event.target.value })\n }\n size=\"small\"\n select\n helperText={\n 'Screen rendered at /collections/{slug} — drop a Product grid ' +\n 'with source \"A collection\" and {{collection.*}} tokens.'\n }\n >\n <MenuItem value=\"\">{'None (collection URLs 404)'}</MenuItem>\n {screenEntries.map(([screenId, path]) => (\n <MenuItem key={screenId} value={screenId}>\n {`/${path === '/' ? '' : path}`}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n label=\"Currency\"\n value={current.currency ?? 'USD'}\n onChange={(event) => update({ currency: event.target.value })}\n size=\"small\"\n select\n sx={{ maxWidth: 200 }}\n helperText=\"Charges settle in USD; more currencies are coming\"\n >\n <MenuItem value=\"USD\">{'USD ($)'}</MenuItem>\n </TextField>\n <FormControlLabel\n control={\n <Switch\n size=\"small\"\n checked={current.guestCheckout !== false}\n onChange={(event) =>\n update({ guestCheckout: event.target.checked })\n }\n />\n }\n label=\"Allow guest checkout (no account required)\"\n />\n <TextField\n label=\"Terms URL\"\n value={current.termsUrl ?? ''}\n onChange={(event) => update({ termsUrl: event.target.value })}\n size=\"small\"\n placeholder=\"/terms\"\n helperText=\"Linked from checkout when set\"\n />\n <TextField\n label=\"Receipt footer\"\n value={current.receiptFooter ?? ''}\n onChange={(event) => update({ receiptFooter: event.target.value })}\n size=\"small\"\n multiline\n minRows={2}\n placeholder=\"Thanks for supporting our shop!\"\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {'Password protection and maintenance mode live under Site ' +\n 'Protection.'}\n </Typography>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n disabled={!draft}\n onClick={handleSave}\n sx={{ alignSelf: 'flex-start' }}\n >\n {'Save store settings'}\n </Button>\n <Stack spacing={0.5}>\n <Typography variant=\"subtitle2\">{'Product feed'}</Typography>\n {feedUrl ? (\n <>\n <TextField\n label=\"Google Merchant Center feed URL\"\n value={feedUrl}\n size=\"small\"\n slotProps={{ input: { readOnly: true } }}\n onFocus={(event) => event.target.select()}\n helperText={\n 'Paste this into Merchant Center → Products → Feeds as a ' +\n 'scheduled fetch. It lists every active product with price ' +\n 'and availability, and refreshes itself.'\n }\n />\n <Button\n size=\"small\"\n sx={{ alignSelf: 'flex-start' }}\n onClick={() => {\n void navigator.clipboard?.writeText(feedUrl).then(() =>\n enqueueSnackbar('Feed URL copied', {\n variant: 'success',\n persist: false,\n }),\n )\n }}\n >\n {'Copy feed URL'}\n </Button>\n </>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Publish this site to a subdomain or custom domain to get its ' +\n 'Google Merchant Center feed URL.'}\n </Typography>\n )}\n </Stack>\n </Stack>\n </CardDisplay>\n )\n}\nStoreSettingsCard.displayName = 'StoreSettingsCard'\n\nexport default StoreSettingsCard\n"],"names":["CardDisplay","useSnackbar","Button","FormControlLabel","MenuItem","Stack","Switch","TextField","Typography","doc","setDoc","useCallback","useState","useFirestore","useFirestoreDoc","writeGuardedBySeed","hostPublicOrigin","pluginDocsHelp","StoreSettingsCard","props","current","hostId","firestore","enqueueSnackbar","data","store","status","storeStatus","fromCache","storeFromCache","host","draft","setDraft","pdpScreenId","collectionScreenId","currency","guestCheckout","termsUrl","receiptFooter","update","patch","feedUrl","origin","undefined","screenEntries","Object","entries","screens","sort","a","b","String","localeCompare","handleSave","verdict","subject","unreadable","merge","ok","message","variant","persist","header","help","contentGutterX","contentGutterY","spacing","label","value","onChange","event","target","size","select","helperText","map","screenId","path","sx","maxWidth","control","checked","placeholder","multiline","minRows","color","disabled","onClick","alignSelf","slotProps","input","readOnly","onFocus","navigator","clipboard","writeText","then","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
*/
|
|
17
|
+
export interface StorefrontTaxSummaryCardProps {
|
|
18
|
+
hostId: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The sales tax this merchant's own storefront collected (AGL-2440).
|
|
22
|
+
*
|
|
23
|
+
* `storefrontTaxCollected` has recorded every taxed storefront sale since
|
|
24
|
+
* AGL-1904 and every reader of it was Aglyn's — the staff tax return, the DSAR
|
|
25
|
+
* export. The merchant, whose sales these are, could see one order's
|
|
26
|
+
* `totals.taxCents` at a time and nothing else. This card is that absence
|
|
27
|
+
* closed, and closing it is all it does.
|
|
28
|
+
*
|
|
29
|
+
* ## THE NUMBER, NOT THE LABEL
|
|
30
|
+
*
|
|
31
|
+
* This card presents the buckets SEPARATELY and prints no per-row verdict on
|
|
32
|
+
* who must remit which one.
|
|
33
|
+
*
|
|
34
|
+
* The copy may not say that Aglyn makes no determination: Aglyn IS a
|
|
35
|
+
* marketplace facilitator for storefront sales and the Terms publish that at
|
|
36
|
+
* §10.7 (AGL-1956), so such a line would contradict the company's own
|
|
37
|
+
* contract.
|
|
38
|
+
*
|
|
39
|
+
* Separate buckets and no per-row verdict still hold, because §10.7 is
|
|
40
|
+
* narrow: it binds Aglyn only where applicable law gives it a collection
|
|
41
|
+
* obligation for the transaction in question, which is a per-sale,
|
|
42
|
+
* per-jurisdiction test and not a fact about a merchant. So the copy still
|
|
43
|
+
* describes HOW each figure was computed — who calculated the rate, and
|
|
44
|
+
* against whose registration — and adds only what §10.7 itself says about the
|
|
45
|
+
* bucket Aglyn holds. There is still no "yours to remit" column and no total
|
|
46
|
+
* across the buckets. A merged "tax collected" figure would be the
|
|
47
|
+
* banned determination wearing a neutral name: it would sum tax Aglyn holds
|
|
48
|
+
* and remits with tax the merchant owes, the exact conflation the module warns
|
|
49
|
+
* about in bold — *the two store modes are DIFFERENT FACTS and must never be
|
|
50
|
+
* summed*. That is why the three groups never share a total row, and why the
|
|
51
|
+
* grand total in the header is a TRANSACTION COUNT rather than an amount.
|
|
52
|
+
*
|
|
53
|
+
* ## Why the caveats are on the card and not in a tooltip
|
|
54
|
+
*
|
|
55
|
+
* Both are properties of the DATA, not of the law, and both change what a
|
|
56
|
+
* merchant should do with the number: refunds are not yet reflected, so the
|
|
57
|
+
* figure over-states whenever they have refunded; and a row whose taxable base
|
|
58
|
+
* Stripe did not state is counted out loud rather than treated as a zero-base
|
|
59
|
+
* sale. A figure someone may file from cannot carry its completeness caveats
|
|
60
|
+
* behind a hover.
|
|
61
|
+
*
|
|
62
|
+
* ## Why it is route-backed and not a listener
|
|
63
|
+
*
|
|
64
|
+
* `storefrontTaxCollected` is denied to every client in the rules — the
|
|
65
|
+
* collection spans every merchant and a row carries a shopper's address. The
|
|
66
|
+
* server route applies the `hostId` boundary. Nothing here can read another
|
|
67
|
+
* merchant's sales because nothing here reads the collection at all.
|
|
68
|
+
*/
|
|
69
|
+
export declare function StorefrontTaxSummaryCard(props: StorefrontTaxSummaryCardProps): import("react").JSX.Element;
|
|
70
|
+
export declare namespace StorefrontTaxSummaryCard {
|
|
71
|
+
var displayName: string;
|
|
72
|
+
}
|
|
73
|
+
export default StorefrontTaxSummaryCard;
|