PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.4
4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / dist / components / esm / sc-avatar_2.entry.js
surecart / dist / components / esm Last commit date
MockProcessor-5c5e066a.js 2 months ago MockProcessor-5c5e066a.js.map 2 months ago add-query-args-0e2a8393.js 1 year ago add-query-args-0e2a8393.js.map 1 year ago address-b8e2e4c8.js 4 months ago address-b8e2e4c8.js.map 4 months ago animation-registry-de37bd7e.js 3 months ago animation-registry-de37bd7e.js.map 3 months ago app-globals-0eef0276.js 2 months ago app-globals-0eef0276.js.map 2 months ago consumer-f1775a76.js 2 months ago consumer-f1775a76.js.map 2 months ago currency-a0c9bff4.js 1 year ago currency-a0c9bff4.js.map 1 year ago error-c8bf8e3e.js 1 week ago error-c8bf8e3e.js.map 1 week ago fetch-cdff67be.js 1 month ago fetch-cdff67be.js.map 1 month ago floating-ui.dom.esm-8dce4ea1.js 6 months ago floating-ui.dom.esm-8dce4ea1.js.map 6 months ago form-data-76641f16.js 1 year ago form-data-76641f16.js.map 1 year ago functions-4f009ce1.js 3 months ago functions-4f009ce1.js.map 3 months ago geo-permission-62aea8ee.js 1 month ago geo-permission-62aea8ee.js.map 1 month ago getters-1049a6f8.js 2 months ago getters-1049a6f8.js.map 2 months ago getters-1477d792.js 2 months ago getters-1477d792.js.map 2 months ago getters-4bb6cc1b.js 2 months ago getters-4bb6cc1b.js.map 2 months ago getters-7090a9c1.js 1 week ago getters-7090a9c1.js.map 1 week ago getters-9cfeb0de.js 1 week ago getters-9cfeb0de.js.map 1 week ago google-52867ad8.js 1 week ago google-52867ad8.js.map 1 week ago google-e9085e27.js 1 week ago google-e9085e27.js.map 1 week ago google-maps-e8b00ffd.js 3 months ago google-maps-e8b00ffd.js.map 3 months ago index-17aac936.js 1 month ago index-17aac936.js.map 1 month ago index-18f5a1bc.js 2 months ago index-18f5a1bc.js.map 2 months ago index-25e5af33.js 2 months ago index-25e5af33.js.map 2 months ago index-824c562b.js 2 months ago index-824c562b.js.map 2 months ago index-871d88b8.js 1 year ago index-871d88b8.js.map 1 year ago index-a786f689.js 1 week ago index-a786f689.js.map 1 week ago index-c5a96d53.js 2 years ago index-c5a96d53.js.map 2 years ago index-d602bc13.js 1 month ago index-d602bc13.js.map 1 month ago index.js 1 week ago index.js.map 1 month ago inline-c012a0f9.js 1 year ago inline-c012a0f9.js.map 1 year ago lazy-deb42890.js 1 year ago lazy-deb42890.js.map 1 year ago library-1bd957d5.js 2 months ago library-1bd957d5.js.map 2 months ago loader.js 2 weeks ago loader.js.map 1 year ago media-d21119a3.js 1 year ago media-d21119a3.js.map 1 year ago mutations-7458343f.js 2 months ago mutations-7458343f.js.map 2 months ago mutations-9ffd30f4.js 1 week ago mutations-9ffd30f4.js.map 1 week ago mutations-ae7167ad.js 1 week ago mutations-ae7167ad.js.map 1 week ago mutations-b310b068.js 1 week ago mutations-b310b068.js.map 1 week ago page-align-0cdacf32.js 1 year ago page-align-0cdacf32.js.map 1 year ago price-1ff6aa07.js 4 months ago price-1ff6aa07.js.map 4 months ago pure-963214cb.js 1 year ago pure-963214cb.js.map 1 year ago quantity-5c986f3d.js 3 months ago quantity-5c986f3d.js.map 3 months ago razorpay-4c4a3d31.js 3 months ago razorpay-4c4a3d31.js.map 3 months ago remove-query-args-938c53ea.js 1 year ago remove-query-args-938c53ea.js.map 1 year ago sc-address_5.entry.js 2 weeks ago sc-address_5.entry.js.map 2 weeks ago sc-alert.entry.js 1 month ago sc-alert.entry.js.map 1 year ago sc-avatar_2.entry.js 1 week ago sc-avatar_2.entry.js.map 1 month ago sc-badge-notice.entry.js 1 month ago sc-badge-notice.entry.js.map 1 year ago sc-block-ui.entry.js 1 month ago sc-block-ui.entry.js.map 5 months ago sc-breadcrumb.entry.js 1 month ago sc-breadcrumb.entry.js.map 1 year ago sc-breadcrumbs.entry.js 1 month ago sc-breadcrumbs.entry.js.map 1 year ago sc-button-group.entry.js 1 month ago sc-button-group.entry.js.map 1 year ago sc-button_6.entry.js 1 month ago sc-button_6.entry.js.map 1 month ago sc-cancel-dialog_3.entry.js 1 month ago sc-cancel-dialog_3.entry.js.map 1 month ago sc-cancel-discount_4.entry.js 1 month ago sc-cancel-discount_4.entry.js.map 2 months ago sc-card_2.entry.js 1 month ago sc-card_2.entry.js.map 4 months ago sc-cart-button.entry.js 1 week ago sc-cart-button.entry.js.map 1 year ago sc-cart-form-submit.entry.js 2 months ago sc-cart-form-submit.entry.js.map 1 year ago sc-cart-form.entry.js 1 week ago sc-cart-form.entry.js.map 1 month ago sc-cart-header.entry.js 1 week ago sc-cart-header.entry.js.map 1 year ago sc-cart-icon.entry.js 1 week ago sc-cart-icon.entry.js.map 1 year ago sc-cart-loader.entry.js 1 week ago sc-cart-loader.entry.js.map 1 year ago sc-cart-session-provider_3.entry.js 1 week ago sc-cart-session-provider_3.entry.js.map 2 months ago sc-cart-submit.entry.js 2 months ago sc-cart-submit.entry.js.map 1 year ago sc-cart.entry.js 1 week ago sc-cart.entry.js.map 2 months ago sc-cc-logo_2.entry.js 1 month ago sc-cc-logo_2.entry.js.map 1 month ago sc-charges-list.entry.js 1 month ago sc-charges-list.entry.js.map 2 months ago sc-checkout-autofill-provider_11.entry.js 1 week ago sc-checkout-autofill-provider_11.entry.js.map 1 month ago sc-checkout-form-errors.entry.js 2 months ago sc-checkout-form-errors.entry.js.map 1 year ago sc-checkout-mollie-payment_3.entry.js 1 week ago sc-checkout-mollie-payment_3.entry.js.map 2 months ago sc-checkout-product-bundle-component-variants.entry.js 1 week ago sc-checkout-product-bundle-component-variants.entry.js.map 1 month ago sc-checkout-product-price-variant-selector.entry.js 1 week ago sc-checkout-product-price-variant-selector.entry.js.map 4 weeks ago sc-checkout.entry.js 1 week ago sc-checkout.entry.js.map 1 month ago sc-choice-container.entry.js 1 month ago sc-choice-container.entry.js.map 1 year ago sc-choice.entry.js 1 month ago sc-choice.entry.js.map 1 year ago sc-choices.entry.js 1 month ago sc-choices.entry.js.map 1 year ago sc-column_2.entry.js 1 month ago sc-column_2.entry.js.map 1 month ago sc-compact-address_18.entry.js 1 week ago sc-compact-address_18.entry.js.map 1 month ago sc-conditional-form.entry.js 1 week ago sc-conditional-form.entry.js.map 2 months ago sc-consumer.entry.js 2 months ago sc-consumer.entry.js.map 1 year ago sc-coupon-form.entry.js 1 week ago sc-coupon-form.entry.js.map 5 months ago sc-custom-order-price-input.entry.js 1 month ago sc-custom-order-price-input.entry.js.map 2 months ago sc-customer-details.entry.js 1 month ago sc-customer-details.entry.js.map 7 months ago sc-customer-edit.entry.js 1 month ago sc-customer-edit.entry.js.map 2 months ago sc-customer-email.entry.js 1 week ago sc-customer-email.entry.js.map 1 month ago sc-customer-firstname.entry.js 1 week ago sc-customer-firstname.entry.js.map 2 months ago sc-customer-lastname.entry.js 1 week ago sc-customer-lastname.entry.js.map 2 months ago sc-customer-name.entry.js 1 week ago sc-customer-name.entry.js.map 2 months ago sc-dashboard-customer-details.entry.js 1 month ago sc-dashboard-customer-details.entry.js.map 2 months ago sc-dashboard-downloads-list.entry.js 1 month ago sc-dashboard-downloads-list.entry.js.map 2 months ago sc-dialog.entry.js 1 month ago sc-dialog.entry.js.map 5 months ago sc-divider.entry.js 1 month ago sc-divider.entry.js.map 1 year ago sc-donation-choices.entry.js 2 months ago sc-donation-choices.entry.js.map 1 year ago sc-downloads-list.entry.js 1 month ago sc-downloads-list.entry.js.map 1 month ago sc-dropdown_3.entry.js 1 month ago sc-dropdown_3.entry.js.map 6 months ago sc-empty_3.entry.js 1 month ago sc-empty_3.entry.js.map 4 months ago sc-express-payment.entry.js 1 week ago sc-express-payment.entry.js.map 3 months ago sc-feature-demo-banner.entry.js 1 month ago sc-feature-demo-banner.entry.js.map 1 year ago sc-flex.entry.js 1 month ago sc-flex.entry.js.map 1 year ago sc-form-control_2.entry.js 1 month ago sc-form-control_2.entry.js.map 2 months ago sc-form-row.entry.js 1 month ago sc-form-row.entry.js.map 1 year ago sc-form.entry.js 1 month ago sc-form.entry.js.map 1 year ago sc-format-bytes.entry.js 2 months ago sc-format-bytes.entry.js.map 1 year ago sc-format-interval.entry.js 2 months ago sc-format-interval.entry.js.map 1 year ago sc-format-number.entry.js 2 months ago sc-format-number.entry.js.map 1 year ago sc-fulfillment-shipping-status-badge.entry.js 2 months ago sc-fulfillment-shipping-status-badge.entry.js.map 4 months ago sc-fulfillments.entry.js 1 month ago sc-fulfillments.entry.js.map 2 months ago sc-heading_2.entry.js 1 month ago sc-heading_2.entry.js.map 1 year ago sc-image-slider.entry.js 1 month ago sc-image-slider.entry.js.map 1 month ago sc-invoice-status-badge.entry.js 1 month ago sc-invoice-status-badge.entry.js.map 4 months ago sc-invoices-list.entry.js 1 month ago sc-invoices-list.entry.js.map 2 months ago sc-license.entry.js 1 month ago sc-license.entry.js.map 2 months ago sc-licenses-list.entry.js 1 month ago sc-licenses-list.entry.js.map 1 month ago sc-line-item-bump.entry.js 1 week ago sc-line-item-bump.entry.js.map 1 year ago sc-line-item-total.entry.js 1 week ago sc-line-item-total.entry.js.map 6 months ago sc-line-item.entry.js 1 month ago sc-line-item.entry.js.map 1 year ago sc-line-items-provider.entry.js 1 month ago sc-line-items-provider.entry.js.map 1 year ago sc-line-items.entry.js 1 week ago sc-line-items.entry.js.map 1 month ago sc-login-form.entry.js 1 month ago sc-login-form.entry.js.map 2 months ago sc-manual-payment-method_3.entry.js 1 month ago sc-manual-payment-method_3.entry.js.map 3 months ago sc-menu-divider.entry.js 1 month ago sc-menu-divider.entry.js.map 1 year ago sc-menu-label_2.entry.js 1 month ago sc-menu-label_2.entry.js.map 1 month ago sc-mollie-add-method.entry.js 1 month ago sc-mollie-add-method.entry.js.map 2 months ago sc-order-confirmation-customer.entry.js 2 months ago sc-order-confirmation-customer.entry.js.map 1 year ago sc-order-confirmation-details.entry.js 2 months ago sc-order-confirmation-details.entry.js.map 11 months ago sc-order-confirmation-line-items_2.entry.js 1 month ago sc-order-confirmation-line-items_2.entry.js.map 1 month ago sc-order-confirmation.entry.js 1 month ago sc-order-confirmation.entry.js.map 2 months ago sc-order-coupon-form.entry.js 1 week ago sc-order-coupon-form.entry.js.map 2 months ago sc-order-detail.entry.js 2 months ago sc-order-detail.entry.js.map 1 year ago sc-order-fulfillment-badge.entry.js 1 month ago sc-order-fulfillment-badge.entry.js.map 4 months ago sc-order-manual-instructions.entry.js 2 months ago sc-order-manual-instructions.entry.js.map 1 year ago sc-order-password.entry.js 2 months ago sc-order-password.entry.js.map 1 year ago sc-order-return-badge.entry.js 1 month ago sc-order-return-badge.entry.js.map 4 months ago sc-order-shipment-badge.entry.js 2 months ago sc-order-shipment-badge.entry.js.map 4 months ago sc-order-status-badge.entry.js 1 month ago sc-order-status-badge.entry.js.map 4 months ago sc-order-submit.entry.js 1 week ago sc-order-submit.entry.js.map 2 months ago sc-order-summary.entry.js 1 week ago sc-order-summary.entry.js.map 1 month ago sc-order.entry.js 1 month ago sc-order.entry.js.map 1 month ago sc-orders-list.entry.js 1 month ago sc-orders-list.entry.js.map 1 month ago sc-pagination.entry.js 2 months ago sc-pagination.entry.js.map 1 year ago sc-password-nag.entry.js 1 month ago sc-password-nag.entry.js.map 2 months ago sc-password.entry.js 1 month ago sc-password.entry.js.map 1 month ago sc-payment-method-choice_2.entry.js 1 month ago sc-payment-method-choice_2.entry.js.map 1 year ago sc-payment-method-details.entry.js 1 month ago sc-payment-method-details.entry.js.map 1 year ago sc-payment-methods-list.entry.js 1 month ago sc-payment-methods-list.entry.js.map 2 months ago sc-payment.entry.js 1 week ago sc-payment.entry.js.map 3 months ago sc-paypal-add-method.entry.js 1 month ago sc-paypal-add-method.entry.js.map 2 months ago sc-paypal-buttons_2.entry.js 1 week ago sc-paypal-buttons_2.entry.js.map 2 months ago sc-paystack-add-method.entry.js 1 month ago sc-paystack-add-method.entry.js.map 2 months ago sc-pill-option.entry.js 1 month ago sc-pill-option.entry.js.map 1 year ago sc-popover.entry.js 1 month ago sc-popover.entry.js.map 6 months ago sc-premium-tag.entry.js 1 month ago sc-premium-tag.entry.js.map 1 year ago sc-price-choice-container.entry.js 1 month ago sc-price-choice-container.entry.js.map 1 month ago sc-price-choice.entry.js 1 month ago sc-price-choice.entry.js.map 2 months ago sc-price-choices.entry.js 1 week ago sc-price-choices.entry.js.map 1 year ago sc-price-input.entry.js 1 month ago sc-price-input.entry.js.map 1 year ago sc-price-range_4.entry.js 1 month ago sc-price-range_4.entry.js.map 1 year ago sc-price.entry.js 2 months ago sc-price.entry.js.map 11 months ago sc-product-buy-button.entry.js 1 week ago sc-product-buy-button.entry.js.map 2 months ago sc-product-donation-amount-choice.entry.js 1 week ago sc-product-donation-amount-choice.entry.js.map 2 months ago sc-product-donation-choices.entry.js 1 week ago sc-product-donation-choices.entry.js.map 2 months ago sc-product-donation-custom-amount.entry.js 1 week ago sc-product-donation-custom-amount.entry.js.map 2 months ago sc-product-item-list.entry.js 1 week ago sc-product-item-list.entry.js.map 2 months ago sc-product-item.entry.js 1 month ago sc-product-item.entry.js.map 1 year ago sc-product-pills-variant-option.entry.js 1 week ago sc-product-pills-variant-option.entry.js.map 1 year ago sc-product-price-choices.entry.js 1 week ago sc-product-price-choices.entry.js.map 1 year ago sc-product-price-modal.entry.js 1 week ago sc-product-price-modal.entry.js.map 2 months ago sc-product-price.entry.js 1 week ago sc-product-price.entry.js.map 2 months ago sc-product-quantity.entry.js 1 week ago sc-product-quantity.entry.js.map 1 year ago sc-product-selected-price.entry.js 1 week ago sc-product-selected-price.entry.js.map 2 months ago sc-product-text.entry.js 1 week ago sc-product-text.entry.js.map 1 year ago sc-provider.entry.js 2 months ago sc-provider.entry.js.map 1 year ago sc-provisional-banner.entry.js 1 month ago sc-provisional-banner.entry.js.map 11 months ago sc-purchase-downloads-list.entry.js 1 month ago sc-purchase-downloads-list.entry.js.map 1 month ago sc-razorpay-add-method.entry.js 1 month ago sc-razorpay-add-method.entry.js.map 2 months ago sc-recurring-price-choice-container.entry.js 2 months ago sc-recurring-price-choice-container.entry.js.map 1 year ago sc-review-stars.entry.js 2 months ago sc-review-stars.entry.js.map 5 months ago sc-rich-text.entry.js 1 month ago sc-rich-text.entry.js.map 1 month ago sc-skeleton.entry.js 1 month ago sc-skeleton.entry.js.map 1 year ago sc-spacing.entry.js 1 month ago sc-spacing.entry.js.map 1 year ago sc-stripe-add-method.entry.js 1 month ago sc-stripe-add-method.entry.js.map 2 months ago sc-stripe-element.entry.js 1 week ago sc-stripe-element.entry.js.map 2 months ago sc-stripe-payment-element.entry.js 1 week ago sc-stripe-payment-element.entry.js.map 2 months ago sc-stripe-payment-request.entry.js 1 week ago sc-stripe-payment-request.entry.js.map 2 months ago sc-subscription-ad-hoc-confirm.entry.js 1 month ago sc-subscription-ad-hoc-confirm.entry.js.map 6 months ago sc-subscription-details_2.entry.js 1 month ago sc-subscription-details_2.entry.js.map 1 month ago sc-subscription-payment-method.entry.js 1 month ago sc-subscription-payment-method.entry.js.map 2 months ago sc-subscription-payment.entry.js 1 month ago sc-subscription-payment.entry.js.map 2 months ago sc-subscription-switch.entry.js 1 month ago sc-subscription-switch.entry.js.map 2 months ago sc-subscription-variation-confirm.entry.js 1 month ago sc-subscription-variation-confirm.entry.js.map 1 year ago sc-subscription.entry.js 1 month ago sc-subscription.entry.js.map 1 month ago sc-subscriptions-list.entry.js 1 month ago sc-subscriptions-list.entry.js.map 2 months ago sc-summary.entry.js 1 month ago sc-summary.entry.js.map 1 year ago sc-swap.entry.js 1 week ago sc-swap.entry.js.map 2 months ago sc-switch.entry.js 1 month ago sc-switch.entry.js.map 7 months ago sc-tab-group.entry.js 1 month ago sc-tab-group.entry.js.map 1 year ago sc-tab-panel.entry.js 1 month ago sc-tab-panel.entry.js.map 1 year ago sc-tab.entry.js 1 month ago sc-tab.entry.js.map 1 year ago sc-table-head.entry.js 1 month ago sc-table-head.entry.js.map 1 year ago sc-table_3.entry.js 1 month ago sc-table_3.entry.js.map 10 months ago sc-tag.entry.js 1 month ago sc-tag.entry.js.map 4 months ago sc-test-mode-info.entry.js 1 month ago sc-test-mode-info.entry.js.map 6 months ago sc-text.entry.js 1 month ago sc-text.entry.js.map 1 year ago sc-toggle.entry.js 1 month ago sc-toggle.entry.js.map 1 year ago sc-toggles.entry.js 1 month ago sc-toggles.entry.js.map 1 year ago sc-total.entry.js 1 week ago sc-total.entry.js.map 1 year ago sc-upcoming-invoice.entry.js 1 month ago sc-upcoming-invoice.entry.js.map 2 months ago sc-upgrade-required.entry.js 2 months ago sc-upgrade-required.entry.js.map 1 year ago sc-upsell-countdown-timer.entry.js 1 month ago sc-upsell-countdown-timer.entry.js.map 1 year ago sc-upsell-no-thanks-button.entry.js 1 week ago sc-upsell-no-thanks-button.entry.js.map 2 months ago sc-upsell-submit-button.entry.js 1 week ago sc-upsell-submit-button.entry.js.map 2 months ago sc-upsell-totals.entry.js 1 week ago sc-upsell-totals.entry.js.map 2 months ago sc-upsell.entry.js 1 week ago sc-upsell.entry.js.map 2 months ago sc-verification-code.entry.js 1 month ago sc-verification-code.entry.js.map 2 months ago sc-visually-hidden.entry.js 1 month ago sc-visually-hidden.entry.js.map 1 year ago sc-wordpress-password-edit.entry.js 1 month ago sc-wordpress-password-edit.entry.js.map 2 months ago sc-wordpress-user-edit.entry.js 1 month ago sc-wordpress-user-edit.entry.js.map 2 months ago sc-wordpress-user.entry.js 1 month ago sc-wordpress-user.entry.js.map 1 year ago store-289e460c.js 2 months ago store-289e460c.js.map 2 months ago store-ac90a769.js 1 month ago store-ac90a769.js.map 1 month ago store-b1758b00.js 2 months ago store-b1758b00.js.map 2 months ago surecart.js 2 weeks ago surecart.js.map 1 year ago tax-a03623ca.js 1 year ago tax-a03623ca.js.map 1 year ago universe-7bd0ac2b.js 2 months ago universe-7bd0ac2b.js.map 2 months ago util-dfbf863e.js 2 months ago util-dfbf863e.js.map 2 months ago utils-f84b2118.js 3 months ago utils-f84b2118.js.map 3 months ago verification-00df9439.js 1 month ago verification-00df9439.js.map 1 month ago watchers-2d9a1422.js 1 week ago watchers-2d9a1422.js.map 1 week ago watchers-81f32d01.js 1 week ago watchers-81f32d01.js.map 1 week ago watchers-843c3dbe.js 1 week ago watchers-843c3dbe.js.map 1 week ago watchers-c7bbc6b2.js 2 months ago watchers-c7bbc6b2.js.map 2 months ago watchers-df374a91.js 1 week ago watchers-df374a91.js.map 1 week ago
sc-avatar_2.entry.js
315 lines
1 import { r as registerInstance, h, H as Host } from './index-25e5af33.js';
2 import { a as apiFetch } from './index-824c562b.js';
3 import { s as speak } from './index-c5a96d53.js';
4 import { s as state, V as VERIFYING, b as VERIFIED, a as CODE_EXPIRED, U as UNVERIFIED, r as resetUser } from './store-ac90a769.js';
5 import { s as state$1 } from './mutations-9ffd30f4.js';
6 import { b as isRateLimited } from './util-dfbf863e.js';
7 import { r as resendAnchorFrom, g as getBlockedDuplicateSeconds, s as secondsUntil, R as RESEND_COOLDOWN_SECONDS } from './verification-00df9439.js';
8 import './add-query-args-0e2a8393.js';
9 import './remove-query-args-938c53ea.js';
10 import './index-18f5a1bc.js';
11 import './utils-f84b2118.js';
12 import './google-e9085e27.js';
13 import './currency-a0c9bff4.js';
14 import './store-b1758b00.js';
15 import './price-1ff6aa07.js';
16
17 const scAvatarCss = ":host{display:inline-block;--sc-avatar-size:3rem}.avatar{display:inline-flex;align-items:center;justify-content:center;position:relative;width:var(--sc-avatar-size);height:var(--sc-avatar-size);background-color:var(--sc-color-gray-400);font-family:var(--sc-font-sans);font-size:calc(var(--sc-avatar-size) * 0.5);font-weight:var(--sc-font-weight-normal);color:var(--sc-color-white);user-select:none;vertical-align:middle}.avatar--circle,.avatar--circle .avatar__image{border-radius:var(--sc-border-radius-circle)}.avatar--rounded,.avatar--rounded .avatar__image{border-radius:var(--sc-border-radius-medium)}.avatar--square{border-radius:0}.avatar__icon{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%}.avatar__initials{line-height:1;text-transform:uppercase}.avatar__image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;overflow:hidden}";
18 const ScAvatarStyle0 = scAvatarCss;
19
20 const ScAvatar = class {
21 constructor(hostRef) {
22 registerInstance(this, hostRef);
23 this.hasError = false;
24 this.image = '';
25 this.label = '';
26 this.initials = '';
27 this.loading = 'eager';
28 this.shape = 'circle';
29 }
30 handleImageChange() {
31 // Reset the error when a new image is provided
32 this.hasError = false;
33 }
34 render() {
35 return (h("div", { key: 'b9d5edc2dc385d19826d08dafde22a6f777adfb6', part: "base", class: {
36 'avatar': true,
37 'avatar--circle': this.shape === 'circle',
38 'avatar--rounded': this.shape === 'rounded',
39 'avatar--square': this.shape === 'square',
40 }, role: "img", "aria-label": this.label }, this.initials ? (h("div", { part: "initials", class: "avatar__initials" }, this.initials)) : (h("div", { part: "icon", class: "avatar__icon", "aria-hidden": "true" }, h("slot", { name: "icon" }, h("sl-icon", { name: "person-fill", library: "system" })))), this.image && !this.hasError && h("img", { key: 'b4dd0031282277abe94eca4b2cdc54a0d6a0ea9e', part: "image", class: "avatar__image", src: this.image, loading: this.loading, alt: "", onError: () => (this.hasError = true) })));
41 }
42 static get watchers() { return {
43 "image": ["handleImageChange"]
44 }; }
45 };
46 ScAvatar.style = ScAvatarStyle0;
47
48 const scCustomerLoginCss = ":host{display:flex;flex-direction:column;gap:1em}.customer-login{box-sizing:border-box;font-family:var(--sc-input-font-family);font-weight:var(--sc-input-font-weight);letter-spacing:var(--sc-input-letter-spacing);background-color:var(--sc-input-background-color);border:solid 1px var(--sc-input-border-color, var(--sc-input-border));vertical-align:middle;box-shadow:var(--sc-input-box-shadow);transition:var(--sc-input-transition, var(--sc-transition-medium)) color, var(--sc-input-transition, var(--sc-transition-medium)) border, var(--sc-input-transition, var(--sc-transition-medium)) box-shadow;border-radius:var(--sc-input-border-radius-medium);font-size:var(--sc-font-size-small);animation:open 0.5s ease-in-out}.customer-login a{color:var(--sc-color-primary-500)}.customer-code{padding:var(--sc-input-spacing-medium)}.customer-code__sent-info{display:flex;align-items:center;gap:var(--sc-spacing-small);font-size:var(--sc-font-size-small);color:var(--sc-input-help-text-color);margin-bottom:var(--sc-spacing-x-small)}.customer-code__mail-icon{font-size:1em;flex-shrink:0}.customer-code__sent-email{font-weight:var(--sc-font-weight-semibold);color:var(--sc-input-label-color)}.customer-code__change-link{margin-left:auto;white-space:nowrap;text-decoration:none;cursor:pointer;font-size:var(--sc-font-size-small)}.customer-code__change-link:hover{text-decoration:underline}.customer-code__error{color:var(--sc-color-danger-500, red);font-size:var(--sc-font-size-x-small);margin:0}.customer-code__verifying{display:flex;align-items:center;gap:var(--sc-spacing-small);color:var(--sc-input-help-text-color);font-size:var(--sc-font-size-small);margin-bottom:var(--sc-spacing-small)}.customer-code__expired{color:var(--sc-color-danger-500, red);font-size:var(--sc-font-size-x-small);margin:0 0 var(--sc-spacing-small) 0}.customer-code__expired a{color:var(--sc-color-primary-500);text-decoration:none;cursor:pointer}.customer-code__expired a:hover{text-decoration:underline}.customer-code__footer{display:flex;justify-content:space-between;align-items:center;margin-top:var(--sc-spacing-small)}.customer-code__footer-left{display:flex;align-items:center}.customer-code__footer-right{display:flex;align-items:center}.customer-code__resend-timer{color:var(--sc-input-help-text-color);font-size:var(--sc-font-size-x-small)}.customer-code__resend-link{font-size:var(--sc-font-size-x-small);text-decoration:none;cursor:pointer}.customer-code__resend-link:hover{text-decoration:underline}.customer-code__mode-link{display:flex;align-items:center;gap:var(--sc-spacing-xx-small);font-size:var(--sc-font-size-x-small);text-decoration:none;cursor:pointer}.customer-code__mode-link:hover{text-decoration:underline}.customer-password{padding:var(--sc-input-spacing-medium)}.customer-password__error{color:var(--sc-color-danger-500, red);font-size:var(--sc-font-size-x-small);margin:var(--sc-spacing-small) 0 0 0}";
49 const ScCustomerLoginStyle0 = scCustomerLoginCss;
50
51 const ScCustomerLogin = class {
52 constructor(hostRef) {
53 registerInstance(this, hostRef);
54 /** Interval timer reference for cleanup */
55 this.cooldownInterval = null;
56 /** Focus the active view's field after the next render (set when the mode switches). */
57 this.focusAfterRender = false;
58 this.mode = 'code';
59 this.busy = false;
60 this.codeResending = false;
61 this.resendCooldown = 60;
62 this.error = '';
63 this.codeError = '';
64 this.initialMode = 'code';
65 this.password = '';
66 this.codeUnavailable = false;
67 }
68 formatCooldown() {
69 const minutes = Math.floor(this.resendCooldown / 60);
70 const seconds = this.resendCooldown % 60;
71 return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
72 }
73 async verifyCode(code) {
74 var _a, _b;
75 // If not valid email and code, then return.
76 if (!state.email || !code) {
77 return;
78 }
79 try {
80 this.error = '';
81 state.verificationStatus = VERIFYING;
82 this.busy = true;
83 speak(wp.i18n.__('Verifying code...', 'surecart'), 'assertive');
84 const user = (await apiFetch({
85 method: 'POST',
86 path: 'surecart/v1/verification_codes/verify',
87 data: {
88 login: state.email,
89 code: code,
90 },
91 }));
92 state.verificationStatus = VERIFIED;
93 if (!(user === null || user === void 0 ? void 0 : user.verified)) {
94 throw { message: wp.i18n.__('Verification code is not valid. Please try again.', 'surecart') };
95 }
96 // Update the nonce after login to prevent rest_cookie_invalid_nonce errors.
97 // @ts-ignore - nonceMiddleware is set in fetch.ts but not in @wordpress/api-fetch types.
98 if ((user === null || user === void 0 ? void 0 : user.nonce) && apiFetch.nonceMiddleware) {
99 // @ts-ignore
100 apiFetch.nonceMiddleware.nonce = user.nonce;
101 }
102 // Update userState and make the user as logged in user.
103 state.loggedIn = true;
104 state.name = (user === null || user === void 0 ? void 0 : user.name) || [(_a = user === null || user === void 0 ? void 0 : user.customer) === null || _a === void 0 ? void 0 : _a.first_name, (_b = user === null || user === void 0 ? void 0 : user.customer) === null || _b === void 0 ? void 0 : _b.last_name].filter(Boolean).join(' ') || '';
105 state.avatarUrl = (user === null || user === void 0 ? void 0 : user.avatar_url) || '';
106 speak(wp.i18n.__('Verification is successful. Please continue your purchase.', 'surecart'), 'assertive');
107 }
108 catch (e) {
109 // If cooldown has elapsed, treat as expired code.
110 if (this.resendCooldown <= 0) {
111 state.verificationStatus = CODE_EXPIRED;
112 this.error = '';
113 speak(wp.i18n.__('Code expired. Please send a new code.', 'surecart'), 'assertive');
114 }
115 else if (isRateLimited(e)) {
116 this.error = wp.i18n.__('Please wait a moment and try again.', 'surecart');
117 state.verificationStatus = UNVERIFIED;
118 speak(this.error, 'assertive');
119 }
120 else {
121 if (e.code === 'not_found') {
122 this.error = wp.i18n.__('Incorrect code. Please try again.', 'surecart');
123 }
124 else {
125 this.error = (e === null || e === void 0 ? void 0 : e.message) || wp.i18n.__('Incorrect code. Please try again.', 'surecart');
126 }
127 state.verificationStatus = UNVERIFIED;
128 speak(this.error, 'assertive');
129 }
130 }
131 finally {
132 this.busy = false;
133 }
134 }
135 async resendCode() {
136 try {
137 this.error = '';
138 this.codeResending = true;
139 speak(wp.i18n.__('Sending code...', 'surecart'), 'assertive');
140 const response = await apiFetch({
141 method: 'POST',
142 path: 'surecart/v1/verification_codes',
143 data: {
144 login: state.email,
145 checkout_mode: state$1.mode,
146 },
147 });
148 // An in-window request resumes the existing code — don't announce a new email.
149 speak((response === null || response === void 0 ? void 0 : response.email_sent) === false ? wp.i18n.__('A code was already sent to your email.', 'surecart') : wp.i18n.__('Code sent', 'surecart'), 'assertive');
150 state.verificationStatus = UNVERIFIED;
151 // Always anchor a fresh window (falls back to default if platform omits it).
152 state.resendAvailableAt = resendAnchorFrom(response === null || response === void 0 ? void 0 : response.resend_available_in);
153 this.startCooldown();
154 }
155 catch (e) {
156 console.error(e);
157 this.handleCodeSendError(e);
158 }
159 finally {
160 this.codeResending = false;
161 }
162 }
163 handleCodeSendError(error) {
164 // 429: switch to password (different endpoint, no limit conflict).
165 if (isRateLimited(error)) {
166 this.mode = 'password';
167 this.codeUnavailable = true;
168 this.error = wp.i18n.__('Please sign in with your password to continue.', 'surecart');
169 this.startCooldown();
170 return;
171 }
172 const blockedSeconds = getBlockedDuplicateSeconds(error);
173 ((error === null || error === void 0 ? void 0 : error.additional_errors) || []).forEach((e) => {
174 if ((e === null || e === void 0 ? void 0 : e.code) === 'verification_code.email.blocked_duplicate') {
175 this.error = (e === null || e === void 0 ? void 0 : e.message) || wp.i18n.__('A code was recently sent to you. Please wait before requesting another.', 'surecart');
176 // Resume from the platform's reported backoff window (default if absent).
177 state.resendAvailableAt = resendAnchorFrom(blockedSeconds);
178 this.startCooldown();
179 }
180 });
181 }
182 /** Seconds left in the cooldown, always derived from the (decaying) anchor timestamp. */
183 remainingCooldown() {
184 return secondsUntil(state.resendAvailableAt);
185 }
186 startCooldown() {
187 clearInterval(this.cooldownInterval);
188 // Guarantee a concrete anchor so the countdown always decays to 0 and the
189 // resend link returns — never a stuck constant.
190 if (state.resendAvailableAt == null) {
191 state.resendAvailableAt = resendAnchorFrom(RESEND_COOLDOWN_SECONDS);
192 }
193 this.resendCooldown = this.remainingCooldown();
194 if (this.resendCooldown <= 0)
195 return;
196 // Recompute from the anchor each tick so the timer stays correct even if the
197 // tab was backgrounded (throttled intervals) or the page was reloaded.
198 this.cooldownInterval = setInterval(() => {
199 this.resendCooldown = this.remainingCooldown();
200 if (this.resendCooldown <= 0) {
201 clearInterval(this.cooldownInterval);
202 this.cooldownInterval = null;
203 speak(wp.i18n.__('You can resend the code now.', 'surecart'), 'assertive');
204 }
205 }, 1000);
206 }
207 componentWillLoad() {
208 this.mode = this.initialMode;
209 // initialMode='password' means the parent already 429'd on code-send.
210 this.codeUnavailable = this.initialMode === 'password';
211 this.startCooldown();
212 }
213 /** When the user switches views, focus that view's first field after it renders. */
214 handleModeChange() {
215 this.focusAfterRender = true;
216 }
217 componentDidRender() {
218 var _a, _b, _c, _d;
219 if (!this.focusAfterRender)
220 return;
221 this.focusAfterRender = false;
222 // Wait for the freshly rendered child to be ready, then focus it.
223 if (this.mode === 'password') {
224 (_b = (_a = this.passwordInput) === null || _a === void 0 ? void 0 : _a.componentOnReady) === null || _b === void 0 ? void 0 : _b.call(_a).then(() => { var _a; return (_a = this.passwordInput) === null || _a === void 0 ? void 0 : _a.triggerFocus(); });
225 }
226 else {
227 (_d = (_c = this.verificationCode) === null || _c === void 0 ? void 0 : _c.componentOnReady) === null || _d === void 0 ? void 0 : _d.call(_c).then(() => { var _a; return (_a = this.verificationCode) === null || _a === void 0 ? void 0 : _a.triggerFocus(); });
228 }
229 }
230 disconnectedCallback() {
231 clearInterval(this.cooldownInterval);
232 }
233 async loginByPassword(e) {
234 e.preventDefault();
235 try {
236 this.error = '';
237 this.busy = true;
238 const { name, email, avatar_url, nonce } = (await apiFetch({
239 method: 'POST',
240 path: 'surecart/v1/login',
241 data: {
242 login: state.email,
243 password: this.password,
244 },
245 }));
246 // Update the nonce after login to prevent rest_cookie_invalid_nonce errors.
247 // @ts-ignore - nonceMiddleware is set in fetch.ts but not in @wordpress/api-fetch types.
248 if (nonce && apiFetch.nonceMiddleware) {
249 // @ts-ignore
250 apiFetch.nonceMiddleware.nonce = nonce;
251 }
252 state.loggedIn = true;
253 state.verificationStatus = VERIFIED;
254 state.name = name;
255 state.email = email;
256 state.avatarUrl = avatar_url || '';
257 }
258 catch (e) {
259 this.error = isRateLimited(e) ? wp.i18n.__('Please wait a moment and try again.', 'surecart') : (e === null || e === void 0 ? void 0 : e.message) || wp.i18n.__('Login failed. Please try again.', 'surecart');
260 }
261 finally {
262 this.busy = false;
263 }
264 }
265 renderSentInfo() {
266 // Don't claim a code was sent if we 429'd before it left.
267 const headline = this.codeUnavailable ? wp.i18n.__('Signing in as', 'surecart') : wp.i18n.__('Code sent to', 'surecart');
268 const iconName = this.codeUnavailable ? 'user' : 'mail';
269 return (h("div", { class: "customer-code__sent-info" }, h("sc-icon", { name: iconName, class: "customer-code__mail-icon", "aria-hidden": "true" }), h("span", null, headline, " ", h("strong", { class: "customer-code__sent-email" }, state.email)), h("a", { href: "#", class: "customer-code__change-link", onClick: e => {
270 e.preventDefault();
271 resetUser();
272 } }, wp.i18n.__('Change', 'surecart'))));
273 }
274 renderCodeFooter() {
275 const isExpired = state.verificationStatus === CODE_EXPIRED;
276 return (h("div", { class: "customer-code__footer" }, h("div", { class: "customer-code__footer-left" }, !isExpired && this.resendCooldown > 0 && (h("span", { class: "customer-code__resend-timer" }, wp.i18n.__('Resend code in', 'surecart'), " ", this.formatCooldown())), !isExpired && this.resendCooldown <= 0 && (h("a", { href: "#", class: "customer-code__resend-link", onClick: e => {
277 e.preventDefault();
278 this.resendCode();
279 } }, this.codeResending ? wp.i18n.__('Sending...', 'surecart') : wp.i18n.__('Resend Code', 'surecart')))), h("div", { class: "customer-code__footer-right" }, h("a", { href: "#", class: "customer-code__mode-link", onClick: e => {
280 e.preventDefault();
281 this.error = '';
282 this.mode = 'password';
283 } }, h("sc-icon", { name: "lock", "aria-hidden": "true" }), wp.i18n.__('Use Password', 'surecart')))));
284 }
285 renderPasswordView() {
286 return (h("div", { class: "customer-password" }, this.renderSentInfo(), h("sc-flex", { alignItems: "center" }, h("sc-input", { ref: el => (this.passwordInput = el), type: "password", style: { flex: '1' }, placeholder: wp.i18n.__('Password', 'surecart'), required: true, disabled: this.busy, onScInput: (e) => (this.password = e.target.value), onKeyDown: (e) => {
287 if (e.key === 'Enter') {
288 this.loginByPassword(e);
289 }
290 } }), h("sc-button", { size: "medium", type: "primary", loading: this.busy, onClick: (e) => this.loginByPassword(e) }, h("sc-icon", { slot: "prefix", name: "lock" }), "\u00A0", wp.i18n.__('Login', 'surecart'))), !!(this.error || this.codeError) && h("p", { class: "customer-password__error", role: "alert", innerHTML: this.error || this.codeError }), !this.codeUnavailable && (h("div", { class: "customer-code__footer" }, h("div", { class: "customer-code__footer-left" }), h("div", { class: "customer-code__footer-right" }, h("a", { href: "#", class: "customer-code__mode-link", onClick: e => {
291 e.preventDefault();
292 this.error = '';
293 this.mode = 'code';
294 } }, h("sc-icon", { name: "key", "aria-hidden": "true" }), wp.i18n.__('Use Login Code', 'surecart')))))));
295 }
296 renderCodeView() {
297 const isExpired = state.verificationStatus === CODE_EXPIRED;
298 const isVerifying = state.verificationStatus === VERIFYING;
299 return (h("div", { class: "customer-code" }, this.renderSentInfo(), h("div", null, h("sc-verification-code", { ref: el => (this.verificationCode = el), total: 6, loading: this.busy, onChange: ((value) => this.verifyCode(value)) })), isVerifying && (h("div", { class: "customer-code__verifying" }, h("sc-spinner", null), h("span", null, wp.i18n.__('Verifying...', 'surecart')))), isExpired && (h("p", { class: "customer-code__expired", role: "alert" }, wp.i18n.__('Code expired.', 'surecart'), ' ', h("a", { href: "#", onClick: e => {
300 e.preventDefault();
301 this.resendCode();
302 } }, wp.i18n.__('Send new code', 'surecart')))), !isExpired && (!!this.error || !!this.codeError) && h("p", { class: "customer-code__error", role: "alert", innerHTML: this.error || this.codeError }), this.renderCodeFooter()));
303 }
304 render() {
305 return (h(Host, { key: '6060769aa096e03774f0b4dea7a81082cf5adeaf' }, h("div", { key: '348c822b81d84c15b5dcba5cf080e1cd3047901a', class: "customer-login" }, this.mode === 'code' ? this.renderCodeView() : this.renderPasswordView())));
306 }
307 static get watchers() { return {
308 "mode": ["handleModeChange"]
309 }; }
310 };
311 ScCustomerLogin.style = ScCustomerLoginStyle0;
312
313 export { ScAvatar as sc_avatar, ScCustomerLogin as sc_customer_login };
314
315 //# sourceMappingURL=sc-avatar_2.entry.js.map