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
6 days ago
error-c8bf8e3e.js.map
6 days 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
6 days ago
getters-7090a9c1.js.map
6 days ago
getters-9cfeb0de.js
6 days ago
getters-9cfeb0de.js.map
6 days ago
google-52867ad8.js
6 days ago
google-52867ad8.js.map
6 days ago
google-e9085e27.js
6 days ago
google-e9085e27.js.map
6 days 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
6 days ago
index-a786f689.js.map
6 days 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
6 days 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
6 days ago
mutations-9ffd30f4.js.map
6 days ago
mutations-ae7167ad.js
6 days ago
mutations-ae7167ad.js.map
6 days ago
mutations-b310b068.js
6 days ago
mutations-b310b068.js.map
6 days 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
6 days 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
4 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
6 days 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
6 days ago
sc-cart-form.entry.js.map
1 month ago
sc-cart-header.entry.js
6 days ago
sc-cart-header.entry.js.map
1 year ago
sc-cart-icon.entry.js
6 days ago
sc-cart-icon.entry.js.map
1 year ago
sc-cart-loader.entry.js
6 days ago
sc-cart-loader.entry.js.map
1 year ago
sc-cart-session-provider_3.entry.js
6 days 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
6 days 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
6 days 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
6 days ago
sc-checkout-mollie-payment_3.entry.js.map
2 months ago
sc-checkout-product-bundle-component-variants.entry.js
6 days ago
sc-checkout-product-bundle-component-variants.entry.js.map
1 month ago
sc-checkout-product-price-variant-selector.entry.js
6 days ago
sc-checkout-product-price-variant-selector.entry.js.map
3 weeks ago
sc-checkout.entry.js
6 days 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
6 days ago
sc-compact-address_18.entry.js.map
1 month ago
sc-conditional-form.entry.js
6 days 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
6 days 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
6 days ago
sc-customer-email.entry.js.map
1 month ago
sc-customer-firstname.entry.js
6 days ago
sc-customer-firstname.entry.js.map
2 months ago
sc-customer-lastname.entry.js
6 days ago
sc-customer-lastname.entry.js.map
2 months ago
sc-customer-name.entry.js
6 days 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
4 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
6 days 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
6 days ago
sc-line-item-bump.entry.js.map
1 year ago
sc-line-item-total.entry.js
6 days 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
6 days 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
6 days 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
6 days ago
sc-order-submit.entry.js.map
2 months ago
sc-order-summary.entry.js
6 days 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
6 days 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
6 days 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
6 days 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
6 days ago
sc-product-buy-button.entry.js.map
2 months ago
sc-product-donation-amount-choice.entry.js
6 days ago
sc-product-donation-amount-choice.entry.js.map
2 months ago
sc-product-donation-choices.entry.js
6 days ago
sc-product-donation-choices.entry.js.map
2 months ago
sc-product-donation-custom-amount.entry.js
6 days ago
sc-product-donation-custom-amount.entry.js.map
2 months ago
sc-product-item-list.entry.js
6 days 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
6 days ago
sc-product-pills-variant-option.entry.js.map
1 year ago
sc-product-price-choices.entry.js
6 days ago
sc-product-price-choices.entry.js.map
1 year ago
sc-product-price-modal.entry.js
6 days ago
sc-product-price-modal.entry.js.map
2 months ago
sc-product-price.entry.js
6 days ago
sc-product-price.entry.js.map
2 months ago
sc-product-quantity.entry.js
6 days ago
sc-product-quantity.entry.js.map
1 year ago
sc-product-selected-price.entry.js
6 days ago
sc-product-selected-price.entry.js.map
2 months ago
sc-product-text.entry.js
6 days 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
6 days ago
sc-stripe-element.entry.js.map
2 months ago
sc-stripe-payment-element.entry.js
6 days ago
sc-stripe-payment-element.entry.js.map
2 months ago
sc-stripe-payment-request.entry.js
6 days 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
6 days 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
6 days 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
6 days ago
sc-upsell-no-thanks-button.entry.js.map
2 months ago
sc-upsell-submit-button.entry.js
6 days ago
sc-upsell-submit-button.entry.js.map
2 months ago
sc-upsell-totals.entry.js
6 days ago
sc-upsell-totals.entry.js.map
2 months ago
sc-upsell.entry.js
6 days 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
6 days ago
watchers-2d9a1422.js.map
6 days ago
watchers-81f32d01.js
6 days ago
watchers-81f32d01.js.map
6 days ago
watchers-843c3dbe.js
6 days ago
watchers-843c3dbe.js.map
6 days ago
watchers-c7bbc6b2.js
2 months ago
watchers-c7bbc6b2.js.map
2 months ago
watchers-df374a91.js
6 days ago
watchers-df374a91.js.map
6 days ago
sc-product-item-list.entry.js
314 lines
| 1 | import { r as registerInstance, c as createEvent, h, a as getElement } from './index-25e5af33.js'; |
| 2 | import { s as speak } from './index-c5a96d53.js'; |
| 3 | import { h as handleNonceError } from './fetch-cdff67be.js'; |
| 4 | import './google-52867ad8.js'; |
| 5 | import { a as addQueryArgs, g as getQueryArgs } from './add-query-args-0e2a8393.js'; |
| 6 | import { a as apiFetch } from './index-824c562b.js'; |
| 7 | import './remove-query-args-938c53ea.js'; |
| 8 | import './currency-a0c9bff4.js'; |
| 9 | import './google-e9085e27.js'; |
| 10 | |
| 11 | const scProductItemListCss = ":host {\n display: block;\n}\n\n.product-item-list {\n display: grid;\n grid-template-columns: repeat(var(--sc-product-item-list-column), 1fr);\n gap: var(--sc-product-item-list-gap);\n}\n.product-item-list__wrapper {\n container-type: inline-size;\n display: grid;\n gap: var(--sc-spacing-medium);\n}\n@container (max-width: 576px) {\n .product-item-list__wrapper .product-item-list {\n grid-template-columns: 1fr;\n }\n}\n@container (min-width: 576px) and (max-width: 768px) {\n .product-item-list__wrapper .product-item-list {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n.product-item-list__sort, .product-item-list__empty, .product-item-list__search, .product-item-list__search-tag {\n font-size: 16px;\n}\n.product-item-list__search, .product-item-list__sort {\n display: flex;\n align-items: center;\n gap: var(--sc-spacing-small);\n}\n.product-item-list__controls {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n align-items: center;\n}\n.product-item-list__loader {\n display: grid;\n gap: 0.88rem;\n padding-top: var(--sc-product-item-padding-top);\n padding-bottom: var(--sc-product-item-padding-bottom);\n padding-left: var(--sc-product-item-padding-left);\n padding-right: var(--sc-product-item-padding-right);\n margin-top: var(--sc-product-item-margin-top);\n margin-bottom: var(--sc-product-item-margin-bottom);\n margin-left: var(--sc-product-item-margin-left);\n margin-right: var(--sc-product-item-margin-right);\n border: solid var(--sc-product-item-border-width) var(--sc-product-item-border-color);\n border-radius: var(--sc-product-item-border-radius);\n color: var(--sc-product-title-text-color);\n background-color: var(--sc-product-item-background-color);\n line-height: 1;\n}\n.product-item-list__pagination {\n padding: 40px 0 0;\n width: 100%;\n font-size: var(--sc-font-size-small, var(--wp--preset--font-size--x-small));\n}\n.product-item-list__search-tag {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--sc-spacing-small);\n}\n.product-item-list__search-label {\n font-size: var(--sc-font-size-small, var(--wp--preset--font-size--x-small));\n}\n\n.search-button,\n.clear-button {\n opacity: 0;\n visibility: hidden;\n transition: opacity var(--sc-transition-medium) ease-in-out;\n cursor: pointer;\n}\n\n.product-item-list__has-search .search-button,\n.product-item-list__has-search .clear-button {\n opacity: 1;\n visibility: visible;\n}\n\nsc-product-item::part(image) {\n aspect-ratio: var(--sc-product-image-aspect-ratio);\n}\n\nsc-dropdown sc-button::part(base):focus-visible {\n border: 1px dashed var(--sc-product-item-border-color, --sc-color-gray-50);\n}\n\nsc-pagination {\n font-size: var(--sc-pagination-font-size);\n}"; |
| 12 | const ScProductItemListStyle0 = scProductItemListCss; |
| 13 | |
| 14 | const ScProductItemList = class { |
| 15 | constructor(hostRef) { |
| 16 | registerInstance(this, hostRef); |
| 17 | this.scSearched = createEvent(this, "scSearched", 7); |
| 18 | this.scProductsViewed = createEvent(this, "scProductsViewed", 7); |
| 19 | this.ids = undefined; |
| 20 | this.sort = 'created_at:desc'; |
| 21 | this.query = undefined; |
| 22 | this.searchEnabled = true; |
| 23 | this.sortEnabled = true; |
| 24 | this.collectionEnabled = true; |
| 25 | this.collectionId = undefined; |
| 26 | this.pageTitle = undefined; |
| 27 | this.featured = false; |
| 28 | this.paginationEnabled = true; |
| 29 | this.ajaxPagination = true; |
| 30 | this.paginationAutoScroll = true; |
| 31 | this.layoutConfig = undefined; |
| 32 | this.paginationAlignment = 'center'; |
| 33 | this.limit = 15; |
| 34 | this.page = 1; |
| 35 | this.products = undefined; |
| 36 | this.loading = false; |
| 37 | this.busy = false; |
| 38 | this.error = undefined; |
| 39 | this.currentPage = 1; |
| 40 | this.currentQuery = undefined; |
| 41 | this.pagination = { |
| 42 | total: 0, |
| 43 | total_pages: 0, |
| 44 | }; |
| 45 | this.collections = undefined; |
| 46 | this.selectedCollections = []; |
| 47 | } |
| 48 | handleProductsChanged(newProducts, oldProducts) { |
| 49 | var _a; |
| 50 | const productIds = new Set([...(oldProducts || []).map(product => product.id), ...(newProducts || []).map(product => product.id)]); |
| 51 | if ((newProducts === null || newProducts === void 0 ? void 0 : newProducts.length) === (oldProducts === null || oldProducts === void 0 ? void 0 : oldProducts.length) && productIds.size === newProducts.length) { |
| 52 | return; |
| 53 | } |
| 54 | const title = [ |
| 55 | this.pageTitle, |
| 56 | this.paginationEnabled ? wp.i18n.sprintf(wp.i18n.__('Page %d', 'surecart'), this.currentPage) : undefined, |
| 57 | this.sort ? this.renderSortName() : undefined, |
| 58 | this.query || ((_a = this.selectedCollections) === null || _a === void 0 ? void 0 : _a.length) ? wp.i18n.__('Search results', 'surecart') : undefined, |
| 59 | ] |
| 60 | .filter(item => !!item) |
| 61 | .join(' - '); |
| 62 | this.scProductsViewed.emit({ |
| 63 | products: this.products, |
| 64 | pageTitle: title, |
| 65 | collectionId: this.collectionId, |
| 66 | }); |
| 67 | } |
| 68 | componentWillLoad() { |
| 69 | var _a; |
| 70 | if (!((_a = this === null || this === void 0 ? void 0 : this.products) === null || _a === void 0 ? void 0 : _a.length)) { |
| 71 | this.getProducts(); |
| 72 | } |
| 73 | else { |
| 74 | this.handleProductsChanged(this.products); |
| 75 | } |
| 76 | if (this.collectionEnabled) { |
| 77 | this.getCollections(); |
| 78 | } |
| 79 | } |
| 80 | // Append URL if no 'product-page' found |
| 81 | doPagination(page) { |
| 82 | // handle ajax pagination |
| 83 | if (this.ajaxPagination) { |
| 84 | this.page = page; |
| 85 | this.updateProducts(); |
| 86 | this.paginationAutoScroll && this.el.scrollIntoView({ behavior: 'smooth' }); |
| 87 | return; |
| 88 | } |
| 89 | // handle server pagination. |
| 90 | const newUrl = addQueryArgs(location.href, { 'product-page': page }); |
| 91 | window.location.replace(newUrl); |
| 92 | } |
| 93 | // Fetch all products |
| 94 | async getProducts() { |
| 95 | const { 'product-page': page } = getQueryArgs(window.location.href); |
| 96 | this.page = this.paginationEnabled && page ? parseInt(page) : 1; |
| 97 | try { |
| 98 | this.loading = true; |
| 99 | await this.fetchProducts(); |
| 100 | } |
| 101 | catch (error) { |
| 102 | console.error(error); |
| 103 | } |
| 104 | finally { |
| 105 | this.loading = false; |
| 106 | } |
| 107 | } |
| 108 | // Fetch all collections |
| 109 | async getCollections() { |
| 110 | try { |
| 111 | this.collections = (await apiFetch({ |
| 112 | path: addQueryArgs('surecart/v1/product_collections/', { |
| 113 | per_page: 100, |
| 114 | }), |
| 115 | })); |
| 116 | } |
| 117 | catch (error) { |
| 118 | console.error(error); |
| 119 | } |
| 120 | } |
| 121 | async handleSortChange() { |
| 122 | this.page = 1; |
| 123 | this.updateProducts(); |
| 124 | } |
| 125 | async updateProducts(emitSearchEvent = false) { |
| 126 | var _a; |
| 127 | try { |
| 128 | this.busy = true; |
| 129 | await this.fetchProducts(); |
| 130 | if (!!this.query && emitSearchEvent) { |
| 131 | this.scSearched.emit({ |
| 132 | searchString: this.query, |
| 133 | searchResultCount: (_a = this.products) === null || _a === void 0 ? void 0 : _a.length, |
| 134 | searchResultIds: this.products.map(product => product.id), |
| 135 | }); |
| 136 | } |
| 137 | } |
| 138 | catch (error) { |
| 139 | console.log('error'); |
| 140 | console.error(error); |
| 141 | this.error = error.message || wp.i18n.__('An unknown error occurred.', 'surecart'); |
| 142 | } |
| 143 | finally { |
| 144 | this.busy = false; |
| 145 | } |
| 146 | } |
| 147 | handleIdsChange() { |
| 148 | if (this.debounce !== null) { |
| 149 | clearTimeout(this.debounce); |
| 150 | this.debounce = null; |
| 151 | } |
| 152 | this.debounce = window.setTimeout(() => { |
| 153 | // your debounced traitment |
| 154 | this.updateProducts(); |
| 155 | this.debounce = null; |
| 156 | }, 200); |
| 157 | } |
| 158 | async fetchProducts() { |
| 159 | var _a, _b; |
| 160 | let collectionIds = ((_a = this.selectedCollections) === null || _a === void 0 ? void 0 : _a.map(collection => collection.id)) || []; |
| 161 | // If we have a collectionId, we should only fetch products from that collection. |
| 162 | if (this.collectionId) { |
| 163 | collectionIds = [this.collectionId]; |
| 164 | } |
| 165 | try { |
| 166 | const response = (await apiFetch({ |
| 167 | path: addQueryArgs(`surecart/v1/products/`, { |
| 168 | expand: ['prices', 'featured_product_media', 'product_medias', 'product_media.media', 'variants'], |
| 169 | archived: false, |
| 170 | status: ['published'], |
| 171 | per_page: this.limit, |
| 172 | page: this.page, |
| 173 | sort: this.sort, |
| 174 | product_collection_ids: collectionIds, |
| 175 | ...(this.featured ? { featured: true } : {}), |
| 176 | ...(((_b = this.ids) === null || _b === void 0 ? void 0 : _b.length) ? { ids: this.ids } : {}), |
| 177 | ...(this.query ? { query: this.query } : {}), |
| 178 | }), |
| 179 | parse: false, |
| 180 | })); |
| 181 | this.currentQuery = this.query; |
| 182 | this.pagination = { |
| 183 | total: parseInt(response.headers.get('X-WP-Total')), |
| 184 | total_pages: parseInt(response.headers.get('X-WP-TotalPages')), |
| 185 | }; |
| 186 | this.products = (await response.json()); |
| 187 | if (!!collectionIds.length || !!this.query) { |
| 188 | speak(wp.i18n.sprintf(wp.i18n.__('%s products found', 'surecart'), this.pagination.total)); |
| 189 | } |
| 190 | } |
| 191 | catch (response) { |
| 192 | // we will want to handle nonce error if we are bypassing the apiFetch parser. |
| 193 | await handleNonceError(response) |
| 194 | .then(() => this.fetchProducts()) |
| 195 | .catch(error => { |
| 196 | this.error = error.message || wp.i18n.__('An unknown error occurred.', 'surecart'); |
| 197 | }); |
| 198 | } |
| 199 | } |
| 200 | renderSortName() { |
| 201 | switch (this.sort) { |
| 202 | case 'cataloged_at:desc': |
| 203 | return wp.i18n.__('Latest', 'surecart'); |
| 204 | case 'cataloged_at:asc': |
| 205 | return wp.i18n.__('Oldest', 'surecart'); |
| 206 | case 'name:asc': |
| 207 | return wp.i18n.__('Alphabetical, A-Z', 'surecart'); |
| 208 | case 'name:desc': |
| 209 | return wp.i18n.__('Alphabetical, Z-A', 'surecart'); |
| 210 | default: |
| 211 | return wp.i18n.__('Sort', 'surecart'); |
| 212 | } |
| 213 | } |
| 214 | toggleSelectCollection(collection) { |
| 215 | // if collection not in selectedCollections, add it, otherwise remove it |
| 216 | if (!this.selectedCollections.find(c => c.id === collection.id)) { |
| 217 | this.selectedCollections = [...this.selectedCollections, collection]; |
| 218 | } |
| 219 | else { |
| 220 | this.selectedCollections = this.selectedCollections.filter(c => c.id !== collection.id); |
| 221 | } |
| 222 | } |
| 223 | getCollectionsAfterFiltered() { |
| 224 | var _a; |
| 225 | return ((_a = this.collections) !== null && _a !== void 0 ? _a : []).filter(collection => { |
| 226 | return !this.selectedCollections.some(selected => selected.id === collection.id); |
| 227 | }); |
| 228 | } |
| 229 | isPaginationAvailable() { |
| 230 | var _a; |
| 231 | return !!((_a = this.products) === null || _a === void 0 ? void 0 : _a.length) && this.pagination.total > this.products.length && this.paginationEnabled; |
| 232 | } |
| 233 | render() { |
| 234 | var _a, _b, _c, _d, _e, _f; |
| 235 | return (h("div", { key: '6408c64fbd0b59e9aa1b0359b0dfcc490f4a8f2e', class: { |
| 236 | 'product-item-list__wrapper': true, |
| 237 | 'product-item-list__has-search': !!this.query, |
| 238 | } }, this.error && (h("sc-alert", { key: 'cb15953f986ef3f1d88f3f837f50d3ce47a3216c', type: "danger", open: true }, this.error)), (this.searchEnabled || this.sortEnabled || this.collectionEnabled) && (h("div", { key: 'a101ad04a589e86fa9f0c8d093d41c10a40866cd', class: "product-item-list__header" }, h("div", { key: 'e55564b57eaa31b336b9f70820e8394790529b22', class: "product-item-list__controls" }, h("div", { key: '23123b910e85dc008e9d7984ec18a6608c65598c', class: "product-item-list__sort" }, this.sortEnabled && (h("sc-dropdown", { key: '83eadbcb43854c20f7bab062471e60e8076cd275', style: { '--panel-width': '15em' } }, h("sc-button", { key: '79671e76fb3e790e7938bd48b12dffb8a491efe7', type: "text", caret: true, slot: "trigger" }, h("sc-visually-hidden", { key: 'b807aa612abcea288ff2ea851d6e94f6e8e09c22' }, wp.i18n.__('Dropdown to sort products.', 'surecart'), " "), this.renderSortName(), h("sc-visually-hidden", { key: 'd3f51057f0fb170e8465c5d938551989ef0e335e' }, " ", wp.i18n.__('selected.', 'surecart'))), h("sc-menu", { key: '1748bb7c348d2984a531f3eeaa5b3b17b3687c8c', "aria-label": wp.i18n.__('Sort Products', 'surecart') }, h("sc-menu-item", { key: '53f7e6fbfb1e390e19435a4a5ba7fd9c35f05fa9', "aria-label": wp.i18n.__('Sort by latest', 'surecart'), onClick: () => (this.sort = 'cataloged_at:desc') }, wp.i18n.__('Latest', 'surecart')), h("sc-menu-item", { key: 'f55715b201942ca079ac51d04887071833c3e9ba', "aria-label": wp.i18n.__('Sort by oldest', 'surecart'), onClick: () => (this.sort = 'cataloged_at:asc') }, wp.i18n.__('Oldest', 'surecart')), h("sc-menu-item", { key: '2ddd3d99ece189731314d33cfea794aa2cb9c80f', "aria-label": wp.i18n.__('Sort by name, A to Z', 'surecart'), onClick: () => (this.sort = 'name:asc') }, wp.i18n.__('Alphabetical, A-Z', 'surecart')), h("sc-menu-item", { key: '4003d5a412b3d0ed9a9607396632d0c37bc0acc4', "aria-label": wp.i18n.__('Sort by name, Z to A', 'surecart'), onClick: () => (this.sort = 'name:desc') }, wp.i18n.__('Alphabetical, Z-A', 'surecart'))))), this.collectionEnabled && ((_a = this.collections) !== null && _a !== void 0 ? _a : []).length > 0 && (h("sc-dropdown", { key: '5d802aad1f066a874d7712147ed19e1a7089c158', style: { '--panel-width': '15rem' } }, h("sc-button", { key: 'fcb4357e8da11867435a290fb7b1b177f8536b03', type: "text", caret: true, slot: "trigger" }, h("sc-visually-hidden", { key: '38c5edb5b1dd1424ac47ad7ec110e93e854c696b' }, wp.i18n.sprintf(wp.i18n.__('Dropdown to filter products by collection. %s selected.', 'surecart'), ((_b = this.selectedCollections) === null || _b === void 0 ? void 0 : _b.length) ? this.selectedCollections.map(collection => collection === null || collection === void 0 ? void 0 : collection.name).join(',') : wp.i18n.__('None', 'surecart'))), h("span", { key: '5b9bc299add9b062b54a9bc1e8fe706642b0948e', "aria-hidden": true }, " ", wp.i18n.__('Filter', 'surecart'))), h("sc-menu", { key: '1fc5548d30df5fc47ca85c340becbbca97fb9a28', "aria-label": wp.i18n.__('Filter products', 'surecart') }, ((_c = this.collections) !== null && _c !== void 0 ? _c : []).map(collection => { |
| 239 | return (h("sc-menu-item", { checked: this.selectedCollections.some(selected => (selected === null || selected === void 0 ? void 0 : selected.id) === (collection === null || collection === void 0 ? void 0 : collection.id)), onClick: () => this.toggleSelectCollection(collection), key: collection === null || collection === void 0 ? void 0 : collection.id, "aria-label": wp.i18n.sprintf(wp.i18n.__('Filter by %s', 'surecart'), collection === null || collection === void 0 ? void 0 : collection.name) }, collection.name)); |
| 240 | }))))), h("div", { key: 'a1504c73a5d0c071ab9195b89db82904de4e1da5', class: "product-item-list__search" }, this.searchEnabled && |
| 241 | (((_d = this.query) === null || _d === void 0 ? void 0 : _d.length) && this.query === this.currentQuery ? (h("div", { class: "product-item-list__search-tag" }, h("div", { class: "product-item-list__search-label" }, wp.i18n.__('Search Results:', 'surecart')), h("sc-tag", { clearable: true, onScClear: () => { |
| 242 | this.query = ''; |
| 243 | this.currentQuery = ''; |
| 244 | this.updateProducts(); |
| 245 | }, "aria-label": wp.i18n.sprintf(wp.i18n.__('Searched for %s. Press space to clear search.', 'surecart'), this.query) }, this.query))) : (h("sc-input", { type: "text", placeholder: wp.i18n.__('Search', 'surecart'), size: "small", onKeyUp: e => { |
| 246 | if (e.key === 'Enter') { |
| 247 | this.query = e.target.value; |
| 248 | this.updateProducts(true); |
| 249 | } |
| 250 | }, value: this.query, clearable: true }, this.query ? (h("sc-icon", { class: "clear-button", slot: "prefix", name: "x", onClick: () => { |
| 251 | this.query = ''; |
| 252 | } })) : (h("sc-icon", { slot: "prefix", name: "search" })), h("sc-button", { class: "search-button", type: "link", slot: "suffix", busy: this.busy, onClick: () => { |
| 253 | this.updateProducts(true); |
| 254 | } }, wp.i18n.__('Search', 'surecart'))))))), this.collectionEnabled && this.selectedCollections.length > 0 && (h("div", { key: '03a75bc5384dab3ffad8711a452a6ac24d5ab50a', class: "product-item-list__search-tag" }, this.selectedCollections.map(collection => (h("sc-tag", { key: collection === null || collection === void 0 ? void 0 : collection.id, clearable: true, onScClear: () => { |
| 255 | this.toggleSelectCollection(collection); |
| 256 | } }, collection === null || collection === void 0 ? void 0 : collection.name))))))), !((_e = this.products) === null || _e === void 0 ? void 0 : _e.length) && !this.loading && (h("sc-empty", { key: '04bc5a3be8805ed387e9df841e4e34df3f951439', class: "product-item-list__empty", icon: "shopping-bag" }, wp.i18n.__('No products found.', 'surecart'))), h("section", { key: '1b11f9a08ae5f231c477799ebd6e3c12b6d2ee45', class: "product-item-list", "aria-label": wp.i18n.__('Product list', 'surecart') }, this.loading |
| 257 | ? [...Array(((_f = this.products) === null || _f === void 0 ? void 0 : _f.length) || this.limit || 10)].map((_, index) => (h("div", { class: "product-item-list__loader", key: index }, (this.layoutConfig || []).map(layout => { |
| 258 | var _a, _b; |
| 259 | switch (layout.blockName) { |
| 260 | case 'surecart/product-item-title': |
| 261 | return (h("div", { style: { |
| 262 | textAlign: 'var(--sc-product-title-align)', |
| 263 | } }, h("sc-skeleton", { style: { |
| 264 | width: '80%', |
| 265 | display: 'inline-block', |
| 266 | } }))); |
| 267 | case 'surecart/product-item-image': |
| 268 | return (h("sc-skeleton", { style: { |
| 269 | 'width': '100%', |
| 270 | 'minHeight': '90%', |
| 271 | 'aspectRatio': (_b = (_a = layout.attributes) === null || _a === void 0 ? void 0 : _a.ratio) !== null && _b !== void 0 ? _b : '1/1.4', |
| 272 | '--sc-border-radius-pill': '12px', |
| 273 | 'display': 'inline-block', |
| 274 | } })); |
| 275 | case 'surecart/product-item-price': |
| 276 | return (h("div", { style: { |
| 277 | textAlign: 'var(--sc-product-price-align)', |
| 278 | } }, h("sc-skeleton", { style: { |
| 279 | width: '40%', |
| 280 | display: 'inline-block', |
| 281 | } }))); |
| 282 | default: |
| 283 | return null; |
| 284 | } |
| 285 | })))) |
| 286 | : (this.products || []).map((product, index) => { |
| 287 | return (h("sc-product-item", { key: product === null || product === void 0 ? void 0 : product.id, ...(this.products.length - 1 === index |
| 288 | ? { |
| 289 | 'aria-label': wp.i18n.sprintf(wp.i18n.__('You have reached the end of product list. %s', 'surecart'), this.isPaginationAvailable() ? wp.i18n.__('Press tab to browse more products using pagination.', 'surecart') : wp.i18n.__('No more products to browse.', 'surecart')), |
| 290 | } |
| 291 | : {}), exportparts: "title, price, image", product: product, layoutConfig: this.layoutConfig })); |
| 292 | })), this.isPaginationAvailable() && (h("div", { key: '293890b47fc0c00064c9e7c4b480b7e7ccf75b2c', class: { |
| 293 | 'product-item-list__pagination': true, |
| 294 | '--is-aligned-left': this.paginationAlignment === 'left', |
| 295 | '--is-aligned-center': this.paginationAlignment === 'center', |
| 296 | '--is-aligned-right': this.paginationAlignment === 'right', |
| 297 | } }, h("sc-pagination", { key: '4c80a73728002f933d48642395cc026d98d39198', page: this.page, perPage: this.limit, total: this.pagination.total, totalPages: this.pagination.total_pages, totalShowing: this.limit, onScNextPage: () => this.doPagination(this.page + 1), onScPrevPage: () => this.doPagination(this.page - 1) }))), (this.busy || this.loading) && h("sc-block-ui", { key: 'ba5a393b08ea081b7dfbcdc873ae42271c28da4b' }))); |
| 298 | } |
| 299 | get el() { return getElement(this); } |
| 300 | static get watchers() { return { |
| 301 | "products": ["handleProductsChanged"], |
| 302 | "sort": ["handleSortChange"], |
| 303 | "selectedCollections": ["handleSortChange"], |
| 304 | "query": ["handleSortChange"], |
| 305 | "ids": ["handleIdsChange"], |
| 306 | "limit": ["handleIdsChange"], |
| 307 | "featured": ["handleIdsChange"] |
| 308 | }; } |
| 309 | }; |
| 310 | ScProductItemList.style = ScProductItemListStyle0; |
| 311 | |
| 312 | export { ScProductItemList as sc_product_item_list }; |
| 313 | |
| 314 | //# sourceMappingURL=sc-product-item-list.entry.js.map |