@salla.sa/twilight-components 3.0.16 → 3.0.18
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/dist/cjs/{Helper-BV6HUQzI.js → Helper-D2VNt6eb.js} +1 -1
- package/dist/cjs/{filepond-hJcaHnfM.js → filepond-DkCudLhG.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-poster-DDkDXFOe.js → filepond-plugin-file-poster-C-uxFWfW.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-size-BBZimb8J.js → filepond-plugin-file-validate-size-BikXTQW2.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-type-B5VDnf33.js → filepond-plugin-file-validate-type-Drs7PouU.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-edit-Cmuqwdn1.js → filepond-plugin-image-edit-hxr0h9kt.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-exif-orientation-BFjHgWMS.js → filepond-plugin-image-exif-orientation-CVZmWU_4.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-preview-C7Ow81pR.js → filepond-plugin-image-preview-CBjPKx-d.js} +1 -1
- package/dist/cjs/free-shipping-timer-6QBe5BNS.js +156 -0
- package/dist/cjs/{index-PB4iLztN.js → index-CTYg2zC6.js} +8 -8
- package/dist/cjs/{intlTelInput-Ds-AW6H6.js → intlTelInput-C9X0hKXV.js} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/salla-accordion-body_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-accordion_6.cjs.entry.js +2 -2
- package/dist/cjs/salla-add-product-button_5.cjs.entry.js +2 -2
- package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
- package/dist/cjs/salla-alert_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-app-install-alert.cjs.entry.js +1 -1
- package/dist/cjs/salla-applied-filters.cjs.entry.js +2 -2
- package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
- package/dist/cjs/salla-attachment-view_9.cjs.entry.js +11 -11
- package/dist/cjs/salla-badge.cjs.entry.js +1 -1
- package/dist/cjs/salla-basket-gap.cjs.entry.js +1 -1
- package/dist/cjs/salla-bullet-delivery_3.cjs.entry.js +166 -16
- package/dist/cjs/salla-cart-coupons.cjs.entry.js +1 -1
- package/dist/cjs/salla-cart-item-offers_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-cart-summary-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-cashback-banner.cjs.entry.js +1 -1
- package/dist/cjs/salla-comment-factors.cjs.entry.js +1 -1
- package/dist/cjs/salla-comment-form_9.cjs.entry.js +2 -2
- package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-contacts.cjs.entry.js +1 -1
- package/dist/cjs/salla-cookies-bar.cjs.entry.js +1 -1
- package/dist/cjs/salla-count-down.cjs.entry.js +1 -1
- package/dist/cjs/salla-custom-fields.cjs.entry.js +1 -1
- package/dist/cjs/salla-delivery-promise.cjs.entry.js +1 -1
- package/dist/cjs/salla-edit-order-button.cjs.entry.js +1 -1
- package/dist/cjs/salla-filters-widget.cjs.entry.js +2 -2
- package/dist/cjs/salla-filters.cjs.entry.js +2 -2
- package/dist/cjs/salla-free-shipping-banner.cjs.entry.js +95 -9
- package/dist/cjs/salla-free-shipping-tag.cjs.entry.js +18 -5
- package/dist/cjs/salla-fulfillment-methods.cjs.entry.js +1 -1
- package/dist/cjs/salla-gift-card-redeem_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-gifting.cjs.entry.js +13 -6
- package/dist/cjs/salla-hook.cjs.entry.js +1 -1
- package/dist/cjs/salla-infinite-scroll.cjs.entry.js +2 -2
- package/dist/cjs/salla-installment.cjs.entry.js +1 -1
- package/dist/cjs/salla-list-tile.cjs.entry.js +1 -1
- package/dist/cjs/salla-localization-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-login-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-banner_10.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-exchange-product-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-points-banner.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-points-history.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty.cjs.entry.js +1 -1
- package/dist/cjs/salla-maintenance-alert.cjs.entry.js +1 -1
- package/dist/cjs/salla-map_3.cjs.entry.js +1 -1
- package/dist/cjs/salla-menu.cjs.entry.js +1 -1
- package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
- package/dist/cjs/salla-multiple-bundle-product-cart_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-multiple-bundle-product.cjs.entry.js +1 -1
- package/dist/cjs/salla-next-order-coupon.cjs.entry.js +1 -1
- package/dist/cjs/salla-notification-item_2.cjs.entry.js +2 -2
- package/dist/cjs/salla-offer-modal.cjs.entry.js +8 -4
- package/dist/cjs/salla-offer.cjs.entry.js +7 -3
- package/dist/cjs/salla-order-branch.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-cancel.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit-product-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-items.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-options-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-payment.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-rewards.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-shipments.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-summary.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-orders.cjs.entry.js +2 -2
- package/dist/cjs/salla-payments.cjs.entry.js +1 -1
- package/dist/cjs/salla-placeholder.cjs.entry.js +1 -1
- package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-card-embed.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-size-guide.cjs.entry.js +1 -1
- package/dist/cjs/salla-products-list.cjs.entry.js +6 -5
- package/dist/cjs/salla-products-slider.cjs.entry.js +2 -2
- package/dist/cjs/salla-quick-order.cjs.entry.js +1 -1
- package/dist/cjs/salla-rating-modal-v2.cjs.entry.js +7 -4
- package/dist/cjs/salla-rating-modal.cjs.entry.js +2 -2
- package/dist/cjs/salla-review-factors-tags.cjs.entry.js +1 -1
- package/dist/cjs/salla-review-order-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-scopes.cjs.entry.js +1 -1
- package/dist/cjs/salla-search-product-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-search.cjs.entry.js +2 -2
- package/dist/cjs/salla-skeleton.cjs.entry.js +1 -1
- package/dist/cjs/salla-social-share.cjs.entry.js +1 -1
- package/dist/cjs/salla-social.cjs.entry.js +1 -1
- package/dist/cjs/salla-tab-content_3.cjs.entry.js +1 -1
- package/dist/cjs/salla-thank-you-header.cjs.entry.js +1 -1
- package/dist/cjs/salla-thank-you-page.cjs.entry.js +1 -1
- package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-menu.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-profile.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-settings.cjs.entry.js +1 -1
- package/dist/cjs/salla-verify.cjs.entry.js +1 -1
- package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
- package/dist/cjs/salla-wishlist-actions.cjs.entry.js +1 -1
- package/dist/cjs/salla-wishlist-summary.cjs.entry.js +2 -2
- package/dist/cjs/twilight.cjs.js +2 -2
- package/dist/cjs/{vanilla-picker-ZsewI4gd.js → vanilla-picker-BsLm8rHT.js} +1 -1
- package/dist/collection/components/salla-bullet-delivery/salla-bullet-delivery.js +72 -16
- package/dist/collection/components/salla-bullet-delivery/selector-tracker.js +106 -0
- package/dist/collection/components/salla-free-shipping-banner/salla-free-shipping-banner.css +18 -4
- package/dist/collection/components/salla-free-shipping-banner/salla-free-shipping-banner.js +94 -11
- package/dist/collection/components/salla-free-shipping-tag/salla-free-shipping-tag.css +6 -0
- package/dist/collection/components/salla-free-shipping-tag/salla-free-shipping-tag.js +18 -2
- package/dist/collection/components/salla-gifting/salla-gifting.css +16 -1
- package/dist/collection/components/salla-gifting/salla-gifting.js +11 -4
- package/dist/collection/components/salla-offer/salla-offer.js +6 -2
- package/dist/collection/components/salla-offer-modal/salla-offer-modal.js +7 -3
- package/dist/collection/components/salla-products-list/salla-products-list.js +4 -3
- package/dist/collection/components/salla-rating-modal/salla-rating-modal-v2.js +5 -2
- package/dist/collection/shared/free-shipping-timer.js +130 -0
- package/dist/components/free-shipping-timer.js +150 -0
- package/dist/components/index.js +8 -8
- package/dist/components/salla-bullet-delivery.js +165 -15
- package/dist/components/salla-free-shipping-banner.js +95 -8
- package/dist/components/salla-free-shipping-tag.js +17 -3
- package/dist/components/salla-gifting.js +12 -5
- package/dist/components/salla-offer-modal.js +7 -3
- package/dist/components/salla-offer.js +6 -2
- package/dist/components/salla-products-list2.js +4 -3
- package/dist/components/salla-rating-modal-v22.js +5 -2
- package/dist/docs.json +25 -5
- package/dist/esm/{Helper-CsyfMJLx.js → Helper-C1T-oD4J.js} +1 -1
- package/dist/esm/{filepond-Cla3ae_2.js → filepond-BoWJzHeN.js} +1 -1
- package/dist/esm/{filepond-plugin-file-poster-BO0nARSu.js → filepond-plugin-file-poster-B6MkMtuC.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-size-CrcZ7P5c.js → filepond-plugin-file-validate-size-Dds_462B.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-type-Cci8f5e3.js → filepond-plugin-file-validate-type-DrfGXNay.js} +1 -1
- package/dist/esm/{filepond-plugin-image-edit-y0q-Gkyo.js → filepond-plugin-image-edit-CN7eGg-7.js} +1 -1
- package/dist/esm/{filepond-plugin-image-exif-orientation-WYrkP26J.js → filepond-plugin-image-exif-orientation-CyhxK_6R.js} +1 -1
- package/dist/esm/{filepond-plugin-image-preview-Bz0ZRBQp.js → filepond-plugin-image-preview-DdKqAzT9.js} +1 -1
- package/dist/esm/free-shipping-timer-CnTwkF6y.js +150 -0
- package/dist/esm/{index-DJuBNP7w.js → index-DgUQRYr2.js} +8 -8
- package/dist/esm/{intlTelInput-Dcl0COqn.js → intlTelInput-SwlavcFB.js} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/salla-accordion-body_2.entry.js +1 -1
- package/dist/esm/salla-accordion_6.entry.js +2 -2
- package/dist/esm/salla-add-product-button_5.entry.js +2 -2
- package/dist/esm/salla-advertisement.entry.js +1 -1
- package/dist/esm/salla-alert_2.entry.js +1 -1
- package/dist/esm/salla-app-install-alert.entry.js +1 -1
- package/dist/esm/salla-applied-filters.entry.js +2 -2
- package/dist/esm/salla-apps-icons.entry.js +1 -1
- package/dist/esm/salla-attachment-view_9.entry.js +11 -11
- package/dist/esm/salla-badge.entry.js +1 -1
- package/dist/esm/salla-basket-gap.entry.js +1 -1
- package/dist/esm/salla-bullet-delivery_3.entry.js +166 -16
- package/dist/esm/salla-cart-coupons.entry.js +1 -1
- package/dist/esm/salla-cart-item-offers_2.entry.js +1 -1
- package/dist/esm/salla-cart-summary-card.entry.js +1 -1
- package/dist/esm/salla-cashback-banner.entry.js +1 -1
- package/dist/esm/salla-comment-factors.entry.js +1 -1
- package/dist/esm/salla-comment-form_9.entry.js +2 -2
- package/dist/esm/salla-conditional-offer.entry.js +1 -1
- package/dist/esm/salla-contacts.entry.js +1 -1
- package/dist/esm/salla-cookies-bar.entry.js +1 -1
- package/dist/esm/salla-count-down.entry.js +1 -1
- package/dist/esm/salla-custom-fields.entry.js +1 -1
- package/dist/esm/salla-delivery-promise.entry.js +1 -1
- package/dist/esm/salla-edit-order-button.entry.js +1 -1
- package/dist/esm/salla-filters-widget.entry.js +2 -2
- package/dist/esm/salla-filters.entry.js +2 -2
- package/dist/esm/salla-free-shipping-banner.entry.js +94 -8
- package/dist/esm/salla-free-shipping-tag.entry.js +17 -4
- package/dist/esm/salla-fulfillment-methods.entry.js +1 -1
- package/dist/esm/salla-gift-card-redeem_2.entry.js +1 -1
- package/dist/esm/salla-gifting.entry.js +13 -6
- package/dist/esm/salla-hook.entry.js +1 -1
- package/dist/esm/salla-infinite-scroll.entry.js +2 -2
- package/dist/esm/salla-installment.entry.js +1 -1
- package/dist/esm/salla-list-tile.entry.js +1 -1
- package/dist/esm/salla-localization-modal.entry.js +1 -1
- package/dist/esm/salla-login-modal.entry.js +1 -1
- package/dist/esm/salla-loyalty-banner_10.entry.js +1 -1
- package/dist/esm/salla-loyalty-exchange-product-card.entry.js +1 -1
- package/dist/esm/salla-loyalty-points-banner.entry.js +1 -1
- package/dist/esm/salla-loyalty-points-history.entry.js +1 -1
- package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
- package/dist/esm/salla-loyalty.entry.js +1 -1
- package/dist/esm/salla-maintenance-alert.entry.js +1 -1
- package/dist/esm/salla-map_3.entry.js +1 -1
- package/dist/esm/salla-menu.entry.js +1 -1
- package/dist/esm/salla-metadata.entry.js +1 -1
- package/dist/esm/salla-multiple-bundle-product-cart_2.entry.js +1 -1
- package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +1 -1
- package/dist/esm/salla-multiple-bundle-product.entry.js +1 -1
- package/dist/esm/salla-next-order-coupon.entry.js +1 -1
- package/dist/esm/salla-notification-item_2.entry.js +2 -2
- package/dist/esm/salla-offer-modal.entry.js +8 -4
- package/dist/esm/salla-offer.entry.js +7 -3
- package/dist/esm/salla-order-branch.entry.js +1 -1
- package/dist/esm/salla-order-cancel.entry.js +1 -1
- package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -1
- package/dist/esm/salla-order-details-options.entry.js +1 -1
- package/dist/esm/salla-order-details.entry.js +1 -1
- package/dist/esm/salla-order-edit-item.entry.js +1 -1
- package/dist/esm/salla-order-edit-product-card.entry.js +1 -1
- package/dist/esm/salla-order-edit.entry.js +1 -1
- package/dist/esm/salla-order-items.entry.js +1 -1
- package/dist/esm/salla-order-options-modal.entry.js +1 -1
- package/dist/esm/salla-order-payment.entry.js +1 -1
- package/dist/esm/salla-order-rewards.entry.js +1 -1
- package/dist/esm/salla-order-shipments.entry.js +1 -1
- package/dist/esm/salla-order-summary.entry.js +1 -1
- package/dist/esm/salla-order-totals-card.entry.js +1 -1
- package/dist/esm/salla-orders.entry.js +2 -2
- package/dist/esm/salla-payments.entry.js +1 -1
- package/dist/esm/salla-placeholder.entry.js +1 -1
- package/dist/esm/salla-price-range.entry.js +1 -1
- package/dist/esm/salla-product-card-embed.entry.js +1 -1
- package/dist/esm/salla-product-card.entry.js +1 -1
- package/dist/esm/salla-product-size-guide.entry.js +1 -1
- package/dist/esm/salla-products-list.entry.js +6 -5
- package/dist/esm/salla-products-slider.entry.js +2 -2
- package/dist/esm/salla-quick-order.entry.js +1 -1
- package/dist/esm/salla-rating-modal-v2.entry.js +7 -4
- package/dist/esm/salla-rating-modal.entry.js +2 -2
- package/dist/esm/salla-review-factors-tags.entry.js +1 -1
- package/dist/esm/salla-review-order-item.entry.js +1 -1
- package/dist/esm/salla-scopes.entry.js +1 -1
- package/dist/esm/salla-search-product-card.entry.js +1 -1
- package/dist/esm/salla-search.entry.js +2 -2
- package/dist/esm/salla-skeleton.entry.js +1 -1
- package/dist/esm/salla-social-share.entry.js +1 -1
- package/dist/esm/salla-social.entry.js +1 -1
- package/dist/esm/salla-tab-content_3.entry.js +1 -1
- package/dist/esm/salla-thank-you-header.entry.js +1 -1
- package/dist/esm/salla-thank-you-page.entry.js +1 -1
- package/dist/esm/salla-tiered-offer.entry.js +1 -1
- package/dist/esm/salla-trust-badges.entry.js +1 -1
- package/dist/esm/salla-user-menu.entry.js +1 -1
- package/dist/esm/salla-user-profile.entry.js +1 -1
- package/dist/esm/salla-user-settings.entry.js +1 -1
- package/dist/esm/salla-verify.entry.js +1 -1
- package/dist/esm/salla-wallet.entry.js +1 -1
- package/dist/esm/salla-wishlist-actions.entry.js +1 -1
- package/dist/esm/salla-wishlist-summary.entry.js +2 -2
- package/dist/esm/twilight.js +3 -3
- package/dist/esm/{vanilla-picker-DPvEywPm.js → vanilla-picker-Buy50D7t.js} +1 -1
- package/dist/twilight/{p-134692f5.entry.js → p-027cbda6.entry.js} +1 -1
- package/dist/twilight/{p-48fb615e.entry.js → p-0418c2df.entry.js} +1 -1
- package/dist/twilight/{p-792f1e05.entry.js → p-071aa0e7.entry.js} +1 -1
- package/dist/twilight/{p-be203bd9.entry.js → p-08a15c81.entry.js} +1 -1
- package/dist/twilight/{p-5f5c4f3c.entry.js → p-0ba159db.entry.js} +1 -1
- package/dist/twilight/{p-c657883d.entry.js → p-0d795b58.entry.js} +1 -1
- package/dist/twilight/{p-9f9ab89c.entry.js → p-0f25fedd.entry.js} +1 -1
- package/dist/twilight/{p-15098cb1.entry.js → p-12a25415.entry.js} +1 -1
- package/dist/twilight/p-1960020c.entry.js +4 -0
- package/dist/twilight/{p-f1037da9.entry.js → p-1af9db24.entry.js} +1 -1
- package/dist/twilight/p-23772523.entry.js +4 -0
- package/dist/twilight/{p-67bb5e0c.entry.js → p-254cff9a.entry.js} +1 -1
- package/dist/twilight/{p-a8f88ea6.entry.js → p-259c995a.entry.js} +1 -1
- package/dist/twilight/{p-3f701181.entry.js → p-26d2b28a.entry.js} +1 -1
- package/dist/twilight/{p-8a7bce99.entry.js → p-34148827.entry.js} +1 -1
- package/dist/twilight/{p-8e6bc10e.entry.js → p-361f6033.entry.js} +1 -1
- package/dist/twilight/{p-43700093.entry.js → p-37192614.entry.js} +1 -1
- package/dist/twilight/{p-1e7a0a4f.entry.js → p-3a632c69.entry.js} +1 -1
- package/dist/twilight/{p-b90d0e51.entry.js → p-3d8b77f7.entry.js} +1 -1
- package/dist/twilight/{p-615edf90.entry.js → p-3f842f32.entry.js} +1 -1
- package/dist/twilight/{p-788c0264.entry.js → p-419d6d71.entry.js} +1 -1
- package/dist/twilight/{p-b891f863.entry.js → p-481f52b1.entry.js} +1 -1
- package/dist/twilight/{p-343f57ea.entry.js → p-487b4411.entry.js} +1 -1
- package/dist/twilight/{p-19bf11c5.entry.js → p-4891c565.entry.js} +1 -1
- package/dist/twilight/{p-cfe523ab.entry.js → p-4a3fa153.entry.js} +1 -1
- package/dist/twilight/{p-33689489.entry.js → p-4ab5ee99.entry.js} +1 -1
- package/dist/twilight/{p-558f8ee0.entry.js → p-4b70e6c4.entry.js} +1 -1
- package/dist/twilight/{p-96be66eb.entry.js → p-516e4edc.entry.js} +1 -1
- package/dist/twilight/{p-9f920812.entry.js → p-53735934.entry.js} +1 -1
- package/dist/twilight/{p-e66f1b70.entry.js → p-5694edf1.entry.js} +1 -1
- package/dist/twilight/{p-9e8c583a.entry.js → p-5bbf17dd.entry.js} +1 -1
- package/dist/twilight/{p-43a4e000.entry.js → p-5e8d019e.entry.js} +1 -1
- package/dist/twilight/{p-8278e31a.entry.js → p-5f6fee0e.entry.js} +1 -1
- package/dist/twilight/{p-1436b465.entry.js → p-66ad7a30.entry.js} +1 -1
- package/dist/twilight/p-6af8a7b6.entry.js +4 -0
- package/dist/twilight/{p-96e16a6b.entry.js → p-6b5de500.entry.js} +1 -1
- package/dist/twilight/{p-951f1af4.entry.js → p-6ba3808a.entry.js} +1 -1
- package/dist/twilight/{p-ebb756bc.entry.js → p-6c3084c9.entry.js} +1 -1
- package/dist/twilight/{p-72092eff.entry.js → p-6dccd40f.entry.js} +1 -1
- package/dist/twilight/{p-70d5d802.entry.js → p-6e52b649.entry.js} +1 -1
- package/dist/twilight/{p-caac5694.entry.js → p-70dfb2b4.entry.js} +1 -1
- package/dist/twilight/{p-75015061.entry.js → p-76584a5b.entry.js} +1 -1
- package/dist/twilight/{p-f46da712.entry.js → p-78a56dc6.entry.js} +1 -1
- package/dist/twilight/{p-aa210c8a.entry.js → p-79822d99.entry.js} +1 -1
- package/dist/twilight/{p-5aa8ec0a.entry.js → p-7b5f97e7.entry.js} +1 -1
- package/dist/twilight/{p-9e24dec9.entry.js → p-7f97335a.entry.js} +1 -1
- package/dist/twilight/{p-3cbcec7c.entry.js → p-7fd9dc36.entry.js} +1 -1
- package/dist/twilight/p-84b0e7a9.entry.js +4 -0
- package/dist/twilight/p-8766e236.entry.js +4 -0
- package/dist/twilight/{p-a9a8a819.entry.js → p-8c1d14f0.entry.js} +1 -1
- package/dist/twilight/{p-a92e5068.entry.js → p-8c40278d.entry.js} +1 -1
- package/dist/twilight/{p-5b52ef24.entry.js → p-92fd20a0.entry.js} +1 -1
- package/dist/twilight/{p-f24a477c.entry.js → p-9cf1cfd4.entry.js} +1 -1
- package/dist/twilight/{p-f2062f34.entry.js → p-9d15f22d.entry.js} +1 -1
- package/dist/twilight/{p-8907ef61.entry.js → p-9e042cce.entry.js} +1 -1
- package/dist/twilight/{p-74238c01.entry.js → p-9e0a9a5a.entry.js} +1 -1
- package/dist/twilight/{p-8cb6dfd9.entry.js → p-9e65451e.entry.js} +1 -1
- package/dist/twilight/{p-BgGU8BXX.js → p-BK9YeXWp.js} +1 -1
- package/dist/twilight/{p-Do-w5Os8.js → p-BxQMWsr9.js} +1 -1
- package/dist/twilight/{p-DCUZjQXX.js → p-CBLWEyM9.js} +1 -1
- package/dist/twilight/{p-pOFi82Pb.js → p-CCwsxMbZ.js} +1 -1
- package/dist/twilight/{p-DliR9Sp1.js → p-Ca_SZn0u.js} +1 -1
- package/dist/twilight/{p-CqENl4Wm.js → p-CgNJWeaK.js} +1 -1
- package/dist/twilight/p-CnTwkF6y.js +4 -0
- package/dist/twilight/{p-DHk7-wXk.js → p-DMvhNbgN.js} +1 -1
- package/dist/twilight/{p-BPjqOy84.js → p-De1tLqQF.js} +1 -1
- package/dist/twilight/p-DgUQRYr2.js +5 -0
- package/dist/twilight/{p-CRYD9K0S.js → p-NqQdbGu6.js} +1 -1
- package/dist/twilight/{p-C9eNuCn7.js → p-Y2ZIN9Ok.js} +1 -1
- package/dist/twilight/{p-3b3f1838.entry.js → p-a44670a9.entry.js} +1 -1
- package/dist/twilight/{p-2ce991e8.entry.js → p-a5b732b3.entry.js} +1 -1
- package/dist/twilight/{p-5e8b7483.entry.js → p-a95b0dc1.entry.js} +1 -1
- package/dist/twilight/{p-20642013.entry.js → p-aa35cf98.entry.js} +1 -1
- package/dist/twilight/{p-1267d95a.entry.js → p-ac736b30.entry.js} +1 -1
- package/dist/twilight/{p-e651c3ee.entry.js → p-af49191f.entry.js} +1 -1
- package/dist/twilight/{p-82d50064.entry.js → p-b0d2e31f.entry.js} +1 -1
- package/dist/twilight/{p-8b72b7a2.entry.js → p-b1f808f5.entry.js} +1 -1
- package/dist/twilight/{p-b798788b.entry.js → p-b3ada3d0.entry.js} +1 -1
- package/dist/twilight/{p-03e6d42b.entry.js → p-b5a45f87.entry.js} +1 -1
- package/dist/twilight/p-b9d67694.entry.js +4 -0
- package/dist/twilight/{p-dcfd3688.entry.js → p-ba6dd59c.entry.js} +1 -1
- package/dist/twilight/p-bac25e34.entry.js +4 -0
- package/dist/twilight/{p-05e1fc6a.entry.js → p-bb8b2c85.entry.js} +1 -1
- package/dist/twilight/{p-b1aa33f3.entry.js → p-be6f8551.entry.js} +1 -1
- package/dist/twilight/{p-91ef7c89.entry.js → p-bed54154.entry.js} +1 -1
- package/dist/twilight/{p-4a3d4c28.entry.js → p-bed68e52.entry.js} +1 -1
- package/dist/twilight/{p-a7d2613b.entry.js → p-bfd5e263.entry.js} +1 -1
- package/dist/twilight/{p-63053048.entry.js → p-c4cf0b4d.entry.js} +1 -1
- package/dist/twilight/{p-189fa3c4.entry.js → p-cb48a5ef.entry.js} +1 -1
- package/dist/twilight/{p-370924c0.entry.js → p-cdeb9bcc.entry.js} +1 -1
- package/dist/twilight/{p-9b46c1ab.entry.js → p-d0aeeb7f.entry.js} +1 -1
- package/dist/twilight/{p-537748de.entry.js → p-d0ff9a3e.entry.js} +1 -1
- package/dist/twilight/{p-86db3fe8.entry.js → p-d1093a59.entry.js} +1 -1
- package/dist/twilight/{p-4be6e307.entry.js → p-d1121b3f.entry.js} +1 -1
- package/dist/twilight/{p-be84879f.entry.js → p-d1204965.entry.js} +1 -1
- package/dist/twilight/p-d346dabd.entry.js +4 -0
- package/dist/twilight/{p-3b6efc6e.entry.js → p-d4fb9921.entry.js} +1 -1
- package/dist/twilight/{p-52749db7.entry.js → p-d8955835.entry.js} +1 -1
- package/dist/twilight/{p-1c2d9885.entry.js → p-d9a1bf08.entry.js} +1 -1
- package/dist/twilight/{p-e67fdc9d.entry.js → p-da0df10b.entry.js} +1 -1
- package/dist/twilight/p-e24fbbb4.entry.js +4 -0
- package/dist/twilight/{p-a16f2376.entry.js → p-e38a6793.entry.js} +1 -1
- package/dist/twilight/{p-4a843e15.entry.js → p-e457e68f.entry.js} +1 -1
- package/dist/twilight/{p-382dc313.entry.js → p-e9b03e9c.entry.js} +1 -1
- package/dist/twilight/{p-c33be542.entry.js → p-eaf0c514.entry.js} +1 -1
- package/dist/twilight/{p-5b60ebdf.entry.js → p-ee479819.entry.js} +1 -1
- package/dist/twilight/p-ee65c489.entry.js +4 -0
- package/dist/twilight/{p-a6ba5168.entry.js → p-eefced26.entry.js} +1 -1
- package/dist/twilight/{p-a36e2dcf.entry.js → p-f7a58656.entry.js} +1 -1
- package/dist/twilight/{p-4a07e070.entry.js → p-f7ab5825.entry.js} +1 -1
- package/dist/twilight/{p-927d1967.entry.js → p-f9587127.entry.js} +1 -1
- package/dist/twilight/{p-09c651a2.entry.js → p-f9e5ed10.entry.js} +1 -1
- package/dist/twilight/{p-5f1b28e3.entry.js → p-fcb1009f.entry.js} +1 -1
- package/dist/twilight/{p-de458068.entry.js → p-fddf1997.entry.js} +1 -1
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/types/components/salla-bullet-delivery/salla-bullet-delivery.d.ts +9 -1
- package/dist/types/components/salla-bullet-delivery/selector-tracker.d.ts +30 -0
- package/dist/types/components/salla-free-shipping-banner/salla-free-shipping-banner.d.ts +19 -5
- package/dist/types/components/salla-free-shipping-tag/salla-free-shipping-tag.d.ts +6 -1
- package/dist/types/components/salla-gifting/salla-gifting.d.ts +1 -0
- package/dist/types/components/salla-rating-modal/salla-rating-modal-v2.d.ts +1 -0
- package/dist/types/components.d.ts +11 -25
- package/dist/types/shared/free-shipping-timer.d.ts +36 -0
- package/package.json +5 -5
- package/dist/cjs/free-shipping-DkIKD6ch.js +0 -31
- package/dist/components/free-shipping.js +0 -29
- package/dist/esm/free-shipping-Brg4wsgg.js +0 -29
- package/dist/twilight/p-0c292c9a.entry.js +0 -4
- package/dist/twilight/p-1a7b0a2b.entry.js +0 -4
- package/dist/twilight/p-3b4aa865.entry.js +0 -4
- package/dist/twilight/p-3f713fc0.entry.js +0 -4
- package/dist/twilight/p-6a8d04d9.entry.js +0 -4
- package/dist/twilight/p-86ade991.entry.js +0 -4
- package/dist/twilight/p-9b02e779.entry.js +0 -4
- package/dist/twilight/p-Brg4wsgg.js +0 -4
- package/dist/twilight/p-DJuBNP7w.js +0 -5
- package/dist/twilight/p-bf12f616.entry.js +0 -4
- package/dist/twilight/p-d5b394c9.entry.js +0 -4
- package/dist/twilight/p-def7b9c4.entry.js +0 -4
|
@@ -12,6 +12,7 @@ import { Attachment as Attachment1 } from "./components/salla-attachment-view/sa
|
|
|
12
12
|
import { Option } from "./components/salla-booking-field/interfaces";
|
|
13
13
|
import { SallaBookingFieldInvalidInputEvent } from "./components/salla-booking-field/salla-booking-field";
|
|
14
14
|
import { AddressCreatedEvent, BulletDeliveryConfirmedEvent, HeaderContextUpdateEvent } from "./components/salla-bullet-delivery/interfaces";
|
|
15
|
+
import { SelectorTrigger } from "./components/salla-bullet-delivery/selector-tracker";
|
|
15
16
|
import { Coupon } from "./components/salla-cart-coupons/interfaces";
|
|
16
17
|
import { Color, Options } from "./components/salla-color-picker/interfaces";
|
|
17
18
|
import { Comment, CommentSort, CommentType, ReviewFactor } from "./components/salla-comments/interfaces";
|
|
@@ -58,6 +59,7 @@ export { Attachment as Attachment1 } from "./components/salla-attachment-view/sa
|
|
|
58
59
|
export { Option } from "./components/salla-booking-field/interfaces";
|
|
59
60
|
export { SallaBookingFieldInvalidInputEvent } from "./components/salla-booking-field/salla-booking-field";
|
|
60
61
|
export { AddressCreatedEvent, BulletDeliveryConfirmedEvent, HeaderContextUpdateEvent } from "./components/salla-bullet-delivery/interfaces";
|
|
62
|
+
export { SelectorTrigger } from "./components/salla-bullet-delivery/selector-tracker";
|
|
61
63
|
export { Coupon } from "./components/salla-cart-coupons/interfaces";
|
|
62
64
|
export { Color, Options } from "./components/salla-color-picker/interfaces";
|
|
63
65
|
export { Comment, CommentSort, CommentType, ReviewFactor } from "./components/salla-comments/interfaces";
|
|
@@ -425,7 +427,7 @@ export namespace Components {
|
|
|
425
427
|
/**
|
|
426
428
|
* Opens the bullet delivery modal. Pass `silent: true` to run the same state/data loading below without showing the modal — used by tryAutoConfirmAfterLogin() so a successful auto-confirm never flashes the saved-addresses list; the caller is responsible for revealing the modal itself if it still needs the customer's input.
|
|
427
429
|
*/
|
|
428
|
-
"open": (silent?: boolean) => Promise<void>;
|
|
430
|
+
"open": (silent?: boolean, trigger?: SelectorTrigger) => Promise<void>;
|
|
429
431
|
}
|
|
430
432
|
/**
|
|
431
433
|
* @name SallaBulletDeliveryTag
|
|
@@ -1552,11 +1554,6 @@ export namespace Components {
|
|
|
1552
1554
|
*/
|
|
1553
1555
|
"withLoadMore": boolean;
|
|
1554
1556
|
}
|
|
1555
|
-
/**
|
|
1556
|
-
* Non-dismissible banner announcing the store's free shipping offer.
|
|
1557
|
-
* Where it is rendered (`placement`) decides which banner data is requested, and the
|
|
1558
|
-
* response decides whether it is shown.
|
|
1559
|
-
*/
|
|
1560
1557
|
interface SallaFreeShippingBanner {
|
|
1561
1558
|
/**
|
|
1562
1559
|
* Where the banner is rendered: the home page or the product page.
|
|
@@ -1566,7 +1563,8 @@ export namespace Components {
|
|
|
1566
1563
|
}
|
|
1567
1564
|
/**
|
|
1568
1565
|
* Small "free shipping" tag for a product. Meant to be placed below the price in any
|
|
1569
|
-
* product card.
|
|
1566
|
+
* product card. It follows the free shipping banner: while the banner's countdown is over and the
|
|
1567
|
+
* banner is hidden, the tag is hidden too.
|
|
1570
1568
|
*/
|
|
1571
1569
|
interface SallaFreeShippingTag {
|
|
1572
1570
|
/**
|
|
@@ -4616,11 +4614,6 @@ declare global {
|
|
|
4616
4614
|
prototype: HTMLSallaFiltersWidgetElement;
|
|
4617
4615
|
new (): HTMLSallaFiltersWidgetElement;
|
|
4618
4616
|
};
|
|
4619
|
-
/**
|
|
4620
|
-
* Non-dismissible banner announcing the store's free shipping offer.
|
|
4621
|
-
* Where it is rendered (`placement`) decides which banner data is requested, and the
|
|
4622
|
-
* response decides whether it is shown.
|
|
4623
|
-
*/
|
|
4624
4617
|
interface HTMLSallaFreeShippingBannerElement extends Components.SallaFreeShippingBanner, HTMLStencilElement {
|
|
4625
4618
|
}
|
|
4626
4619
|
var HTMLSallaFreeShippingBannerElement: {
|
|
@@ -4629,7 +4622,8 @@ declare global {
|
|
|
4629
4622
|
};
|
|
4630
4623
|
/**
|
|
4631
4624
|
* Small "free shipping" tag for a product. Meant to be placed below the price in any
|
|
4632
|
-
* product card.
|
|
4625
|
+
* product card. It follows the free shipping banner: while the banner's countdown is over and the
|
|
4626
|
+
* banner is hidden, the tag is hidden too.
|
|
4633
4627
|
*/
|
|
4634
4628
|
interface HTMLSallaFreeShippingTagElement extends Components.SallaFreeShippingTag, HTMLStencilElement {
|
|
4635
4629
|
}
|
|
@@ -7311,11 +7305,6 @@ declare namespace LocalJSX {
|
|
|
7311
7305
|
*/
|
|
7312
7306
|
"withLoadMore"?: boolean;
|
|
7313
7307
|
}
|
|
7314
|
-
/**
|
|
7315
|
-
* Non-dismissible banner announcing the store's free shipping offer.
|
|
7316
|
-
* Where it is rendered (`placement`) decides which banner data is requested, and the
|
|
7317
|
-
* response decides whether it is shown.
|
|
7318
|
-
*/
|
|
7319
7308
|
interface SallaFreeShippingBanner {
|
|
7320
7309
|
/**
|
|
7321
7310
|
* Where the banner is rendered: the home page or the product page.
|
|
@@ -7325,7 +7314,8 @@ declare namespace LocalJSX {
|
|
|
7325
7314
|
}
|
|
7326
7315
|
/**
|
|
7327
7316
|
* Small "free shipping" tag for a product. Meant to be placed below the price in any
|
|
7328
|
-
* product card.
|
|
7317
|
+
* product card. It follows the free shipping banner: while the banner's countdown is over and the
|
|
7318
|
+
* banner is hidden, the tag is hidden too.
|
|
7329
7319
|
*/
|
|
7330
7320
|
interface SallaFreeShippingTag {
|
|
7331
7321
|
/**
|
|
@@ -9794,15 +9784,11 @@ declare module "@stencil/core" {
|
|
|
9794
9784
|
"salla-file-upload": LocalJSX.SallaFileUpload & JSXBase.HTMLAttributes<HTMLSallaFileUploadElement>;
|
|
9795
9785
|
"salla-filters": LocalJSX.SallaFilters & JSXBase.HTMLAttributes<HTMLSallaFiltersElement>;
|
|
9796
9786
|
"salla-filters-widget": LocalJSX.SallaFiltersWidget & JSXBase.HTMLAttributes<HTMLSallaFiltersWidgetElement>;
|
|
9797
|
-
/**
|
|
9798
|
-
* Non-dismissible banner announcing the store's free shipping offer.
|
|
9799
|
-
* Where it is rendered (`placement`) decides which banner data is requested, and the
|
|
9800
|
-
* response decides whether it is shown.
|
|
9801
|
-
*/
|
|
9802
9787
|
"salla-free-shipping-banner": LocalJSX.SallaFreeShippingBanner & JSXBase.HTMLAttributes<HTMLSallaFreeShippingBannerElement>;
|
|
9803
9788
|
/**
|
|
9804
9789
|
* Small "free shipping" tag for a product. Meant to be placed below the price in any
|
|
9805
|
-
* product card.
|
|
9790
|
+
* product card. It follows the free shipping banner: while the banner's countdown is over and the
|
|
9791
|
+
* banner is hidden, the tag is hidden too.
|
|
9806
9792
|
*/
|
|
9807
9793
|
"salla-free-shipping-tag": LocalJSX.SallaFreeShippingTag & JSXBase.HTMLAttributes<HTMLSallaFreeShippingTagElement>;
|
|
9808
9794
|
/**
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface FreeShippingTimerState {
|
|
2
|
+
/** Whether the banner (and the free shipping tag) may be shown right now. */
|
|
3
|
+
visible: boolean;
|
|
4
|
+
/** While visible: time left on the countdown. While hidden: 0. */
|
|
5
|
+
remainingMs: number;
|
|
6
|
+
/** Time until `visible` flips. */
|
|
7
|
+
nextChangeMs: number;
|
|
8
|
+
}
|
|
9
|
+
/** The countdown and hidden period, from the store settings with 45 hours and 7 days as the fallback. */
|
|
10
|
+
export declare function getTimerSettings(): {
|
|
11
|
+
countdownMs: number;
|
|
12
|
+
hiddenMs: number;
|
|
13
|
+
};
|
|
14
|
+
/** The timer exists only for visitors the backend allowed the banner for. */
|
|
15
|
+
export declare function isTimerEnabled(): boolean;
|
|
16
|
+
/** When the visitor first saw the banner, or null if they have not yet. */
|
|
17
|
+
export declare function getStartedAt(): number | null;
|
|
18
|
+
/**
|
|
19
|
+
* Records the first time the visitor saw the banner. Does nothing when it is already recorded
|
|
20
|
+
* or when the feature is off.
|
|
21
|
+
*/
|
|
22
|
+
export declare function startTimerIfNeeded(now?: number): number | null;
|
|
23
|
+
/**
|
|
24
|
+
* Where the visitor is in the repeating cycle: `countdown` visible, then `hidden` hidden, again and again.
|
|
25
|
+
* Nothing but the first-seen time is stored, so changed settings apply on the next check.
|
|
26
|
+
*/
|
|
27
|
+
export declare function computeTimerState(startedAt: number, now: number, countdownMs: number, hiddenMs: number): FreeShippingTimerState;
|
|
28
|
+
/**
|
|
29
|
+
* The state the banner and tags follow. `null` means there is nothing to follow: the feature is off
|
|
30
|
+
* or the visitor has not seen the banner yet.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getFreeShippingTimerState(now?: number): FreeShippingTimerState | null;
|
|
33
|
+
/** Calls back whenever the banner and tags have to show or hide. Returns the unsubscribe function. */
|
|
34
|
+
export declare function subscribeToFreeShippingTimer(listener: () => void): () => void;
|
|
35
|
+
/** Test helper. */
|
|
36
|
+
export declare function resetFreeShippingTimer(): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salla.sa/twilight-components",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.18",
|
|
4
4
|
"license": "GPL-3.0",
|
|
5
5
|
"author": "Salla Team <support@salla.dev> (https://salla.dev)",
|
|
6
6
|
"bugs": {
|
|
@@ -82,9 +82,9 @@
|
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
84
|
"@googlemaps/markerclusterer": "2.6.2",
|
|
85
|
-
"@salla.sa/applepay": "3.0.
|
|
86
|
-
"@salla.sa/twilight": "3.0.
|
|
87
|
-
"@salla.sa/twilight-tailwind-theme": "3.0.
|
|
85
|
+
"@salla.sa/applepay": "3.0.18",
|
|
86
|
+
"@salla.sa/twilight": "3.0.18",
|
|
87
|
+
"@salla.sa/twilight-tailwind-theme": "3.0.18",
|
|
88
88
|
"@salla.sa/ui-address-autocomplete-widget": "1.2.1",
|
|
89
89
|
"@salla.sa/ui-google-map-render": "1.2.1",
|
|
90
90
|
"@types/node": "^20.4.8",
|
|
@@ -104,5 +104,5 @@
|
|
|
104
104
|
"vanilla-lazyload": "^17.9.0",
|
|
105
105
|
"vanilla-picker": "^2.12.3"
|
|
106
106
|
},
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "c9063f4c25769b9a5b3b7448c1075ffbadaf2a95"
|
|
108
108
|
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
'use strict';
|
|
5
|
-
|
|
6
|
-
const cache = new Map();
|
|
7
|
-
async function request(productId) {
|
|
8
|
-
const endpoint = 'products/eligible-for-free-shipping' + (productId ? `/${productId}` : '');
|
|
9
|
-
try {
|
|
10
|
-
// 403 (feature off or plan not supported) and 410 (product gone) mean "not eligible",
|
|
11
|
-
// not a failure worth a toast.
|
|
12
|
-
const response = await salla.api.withoutNotifier(() => salla.api.request(endpoint));
|
|
13
|
-
return response?.data?.eligible === true;
|
|
14
|
-
}
|
|
15
|
-
catch (e) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Whether free shipping applies: to the store when no product is given (banner),
|
|
21
|
-
* or to the product (tag, product page banner). Same calls share one request.
|
|
22
|
-
*/
|
|
23
|
-
function isEligibleForFreeShipping(productId) {
|
|
24
|
-
const key = String(productId ?? '');
|
|
25
|
-
if (!cache.has(key)) {
|
|
26
|
-
cache.set(key, request(productId));
|
|
27
|
-
}
|
|
28
|
-
return cache.get(key);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
exports.isEligibleForFreeShipping = isEligibleForFreeShipping;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
const cache = new Map();
|
|
5
|
-
async function request(productId) {
|
|
6
|
-
const endpoint = 'products/eligible-for-free-shipping' + (productId ? `/${productId}` : '');
|
|
7
|
-
try {
|
|
8
|
-
// 403 (feature off or plan not supported) and 410 (product gone) mean "not eligible",
|
|
9
|
-
// not a failure worth a toast.
|
|
10
|
-
const response = await salla.api.withoutNotifier(() => salla.api.request(endpoint));
|
|
11
|
-
return response?.data?.eligible === true;
|
|
12
|
-
}
|
|
13
|
-
catch (e) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Whether free shipping applies: to the store when no product is given (banner),
|
|
19
|
-
* or to the product (tag, product page banner). Same calls share one request.
|
|
20
|
-
*/
|
|
21
|
-
function isEligibleForFreeShipping(productId) {
|
|
22
|
-
const key = String(productId ?? '');
|
|
23
|
-
if (!cache.has(key)) {
|
|
24
|
-
cache.set(key, request(productId));
|
|
25
|
-
}
|
|
26
|
-
return cache.get(key);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export { isEligibleForFreeShipping as i };
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
const cache = new Map();
|
|
5
|
-
async function request(productId) {
|
|
6
|
-
const endpoint = 'products/eligible-for-free-shipping' + (productId ? `/${productId}` : '');
|
|
7
|
-
try {
|
|
8
|
-
// 403 (feature off or plan not supported) and 410 (product gone) mean "not eligible",
|
|
9
|
-
// not a failure worth a toast.
|
|
10
|
-
const response = await salla.api.withoutNotifier(() => salla.api.request(endpoint));
|
|
11
|
-
return response?.data?.eligible === true;
|
|
12
|
-
}
|
|
13
|
-
catch (e) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Whether free shipping applies: to the store when no product is given (banner),
|
|
19
|
-
* or to the product (tag, product page banner). Same calls share one request.
|
|
20
|
-
*/
|
|
21
|
-
function isEligibleForFreeShipping(productId) {
|
|
22
|
-
const key = String(productId ?? '');
|
|
23
|
-
if (!cache.has(key)) {
|
|
24
|
-
cache.set(key, request(productId));
|
|
25
|
-
}
|
|
26
|
-
return cache.get(key);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export { isEligibleForFreeShipping as i };
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
import{r as t,c as s,h as e,H as i,a as r}from"./p-DJuBNP7w.js";import{S as o}from"./p-DiKTtDW5.js";import{H as a}from"./p-DHk7-wXk.js";const n=class{constructor(e){t(this,e),this.productsFetched=s(this,"productsFetched"),this.selectionChanged=s(this,"selectionChanged"),this.autoload=!1,this.productCardComponent="custom-salla-product-card",this.selectable=!1,this.page=1,this.placeholderText=salla.lang.get("pages.categories.no_products"),this.endOfText=salla.lang.get("common.elements.end_of_content"),this.failedLoadMore=salla.lang.get("common.elements.failed_to_load_more"),this.currentPage=salla.config.get("page"),this.filtersSnapshot=[],this.selectedProducts=new Map,this.lastViewedProductKey="lastViewedProductId",this.filtersKey="filters",this.infiniteScrollStateKey="infiniteScrollState",this.prevCategoryIdKey="prevCategoryId",this.isProcessing=!1,this.scrollTimeout=null,this.requestId=null,this.boundScrollToLastViewedProduct=()=>this.scrollToLastViewedProduct(),this.boundHandleScroll=()=>this.handleScroll(),this.specialPagesWithoutIds={"product.index.latest":"latest","product.index.offers":"offers","product.index.search":"search","product.index.sales":"sales"},this.filtersChangedListener=t=>this.setFilters(t),this.onWishlistItemRemoved=(t,s)=>{if("wishlist"!==this.getSource()||!this.wrapper)return;const e=String(s),i=this.hasCustomComponent?this.productCardComponent:"salla-product-card";for(const t of Array.from(this.wrapper.children)){const s=t,r=t.querySelector(i),o=s.product?.id??r?.product?.id;if(null!=o&&String(o)===e){t.remove();break}}for(const t of Array.from(this.wrapper.children)){if(!t.classList.contains("s-products-list-selectable-item"))continue;const s=t;if(null!=s.product?.id&&String(s.product.id)===e&&!t.querySelector(i)){t.remove();break}}if(this.selectable){for(const t of Array.from(this.selectedProducts.keys()))String(t)===e&&this.selectedProducts.delete(t);this.emitSelection()}},this.onWishlistStorageSynced=()=>a.syncWishlistIcons(this.wrapper,`${this.productCardComponent}, salla-product-card`),this.includes=a.parseJson(this.includes||this.host.getAttribute("includes")),Array.isArray(this.includes)||(this.includes=null),a.setIncludes(this.includes)}connectedCallback(){this.langUnsubscribe=salla.lang.subscribe((()=>{this.placeholderText=salla.lang.get("pages.categories.no_products"),this.endOfText=salla.lang.get("common.elements.end_of_content"),this.failedLoadMore=salla.lang.get("common.elements.failed_to_load_more"),this.currentPage=salla.config.get("page")})),"scrollRestoration"in history&&(history.scrollRestoration="manual"),window.addEventListener("DOMContentLoaded",this.boundScrollToLastViewedProduct),salla.event.on("salla-filters::changed",this.filtersChangedListener),salla.event.on("wishlist::removed",this.onWishlistItemRemoved),salla.event.on("wishlist::storage.synced",this.onWishlistStorageSynced)}disconnectedCallback(){this.langUnsubscribe?.(),window.removeEventListener("DOMContentLoaded",this.boundScrollToLastViewedProduct),window.removeEventListener("scroll",this.boundHandleScroll),salla.event.off("salla-filters::changed",this.filtersChangedListener),salla.event.off("wishlist::removed",this.onWishlistItemRemoved),salla.event.off("wishlist::storage.synced",this.onWishlistStorageSynced)}async setFilters(t){if(t&&JSON.stringify(t)!==JSON.stringify(this.parsedFilters))return window.scrollTo({top:0,behavior:"smooth"}),this.parsedFilters=JSON.parse(JSON.stringify(t)),"product.index"==this.currentPage?.slug&&(this.currentCategoryIdFilter=this.parsedFilters?.category_id?this.toCategoryIdFilter(this.parsedFilters.category_id):null),this.reload()}async reload(){!this.autoload&&this.loadMoreWrapper&&(this.loadMoreWrapper.style.display="none"),this.hasInfiniteScroll&&salla.infiniteScroll.destroy(this.infiniteScroll),await this.buildNextPageUrl(),this.wrapper.innerHTML="",this.hasInfiniteScroll?this.init():this.getInitialData(),this.showPlaceholder&&(this.showPlaceholder=!1,this.placeholderLoader=document.createElement("div"),this.placeholderLoader.classList.add("s-products-list-loading-wrapper"),this.placeholderLoader.style.display="inherit",this.placeholderLoader.innerHTML='<span class="s-button-loader s-button-loader-center s-infinite-scroll-btn-loader"></span>',this.host.insertAdjacentElement("afterend",this.placeholderLoader))}isFilterable(){return salla.config.get("store.settings.product.filters")&&this.filtersResults}getCachedFilters(){return Array.isArray(this.filtersSnapshot)&&this.filtersSnapshot.length?JSON.parse(JSON.stringify(this.filtersSnapshot)):null}emitFilters(t){if(!this.isFilterable())return;if(t.filters)return this.filtersResults=!0,this.filtersSnapshot=JSON.parse(JSON.stringify(t.filters)),void salla.event.emit("filters::fetched",{filters:t.filters});const s=t.cursor?.current>1?this.getCachedFilters():null;if(s)return this.filtersResults=!0,void salla.event.emit("filters::fetched",{filters:s});this.filtersSnapshot=[],salla.event.emit("filters::hidden")}isSourceWithoutValue(){const t=this.getSource();if("wishlist"===t){const t=new URLSearchParams(window.location.search);return!(t.has("source_value")||t.has("source_value[]")||this.sourceValue)}return["offers","latest","sales","top-rated","reorder"].includes(t)}animateItems(){const t=Array.from(this.host.querySelectorAll("salla-product-card"));t.length&&(t.forEach((t=>t.classList.remove("s-products-list-item-animate"))),t[0].getBoundingClientRect(),t.forEach(((t,s)=>{t.style.animationDelay=100*s+"ms",t.classList.add("s-products-list-item-animate")})))}async initBaseNextPageUrl(t){this.nextPage=salla.url.api(`products?source=${t}`),this.includes?.length&&(this.nextPage+=`&includes[]=${this.includes.join("&includes[]=")}`),this.limit&&(this.nextPage+=`&per_page=${this.limit>32?32:this.limit}`),this.sortBy&&(this.nextPage+=`&sort=${encodeURIComponent(this.sortBy)}`),"preview"===salla.config.get("theme.mode")&&(this.nextPage+="&use_username_url=1"),this.nextPage+="&filterable=1";for(const[t,s]of Object.entries(this.parsedFilters||{}))if("source_value"!==t&&"source_value[]"!==t)if(["string","number"].includes(typeof s))this.nextPage+=`&filters[${encodeURIComponent(t)}]=${encodeURIComponent(s)}`;else if(Array.isArray(s))s.forEach((s=>this.nextPage+=`&filters[${encodeURIComponent(t)}][]=${encodeURIComponent(s)}`));else if("object"==typeof s)for(const[e,i]of Object.entries(s))this.nextPage+=`&filters[${encodeURIComponent(t)}][${encodeURIComponent(e)}]=${encodeURIComponent(i)}`;this.nextPage=await this.applyBeforeBuildListUrl(this.nextPage)}async buildNextPageUrl(){let t=this.getSource();if("json"===t)return;const s=sessionStorage.getItem(this.infiniteScrollStateKey);if(s){const{nextPage:t}=JSON.parse(s);if(!t)return}if(await this.initBaseNextPageUrl(t),!this.isSourceWithoutValue())if(["search","related","landing-page"].includes(t))this.nextPage+=`&source_value=${this.getSourceValue()}`;else try{this.nextPage+=`&source_value[]=${this.getSourceValue().join("&source_value[]=")}`}catch(s){salla.logger.warn(`source-value prop should be array of ids ex source-value="[1,2,3]" for the source [${t}]`),this.sourceValueIsValid=!1}}loading(t=!0,s=!1){if(t){let t=s&&!this.autoload?this.btnLoader:this.loader;t&&(t.style.display="inherit")}else this.autoload||this.btnLoader&&(this.btnLoader.style.display="none"),this.loader&&(this.loader.style.display="none")}getItemHTML(t){"landing-page"===this.getSource()&&(t.url=""),"search"===this.getSource()&&t.url&&(t.url=salla.url.addParamToUrl("_svs","search-result",t.url));const s=document.createElement(this.hasCustomComponent?this.productCardComponent:"salla-product-card");if(s.product=t,this.compactCards&&(s.compact=!0,s.toggleAttribute("compact",!0)),this.applyLandingPageStyles(s),this.applyHorizontalCardStyles(s),this.applyOutOfStockVisibility(s,t),s.addEventListener("click",(s=>{const e=s.target;e.closest("a")?(a.saveProductSource(this.getSource()),a.saveProductPosition(t.position),a.saveRequestId(this.requestId),this.hasInfiniteScroll&&(this.takeStateSnapshot(),sessionStorage.setItem(this.lastViewedProductKey,t.id))):e.closest("salla-add-product-button")&&(a.saveProductPosition(t.position),a.saveRequestId(this.requestId))})),this.selectable){const e=this.wrapSelectableItem(s,t);return this.applyOutOfStockVisibility(e,t),e}return s}applyOutOfStockVisibility(t,s){s?.is_out_of_stock&&!0===salla.config.get("store.settings.product.hide_out_of_stock")&&(t.hidden=!0,t.style.display="none",t.setAttribute("aria-hidden","true"),t.setAttribute("data-out-of-stock-hidden",""))}wrapSelectableItem(t,s){const e=document.createElement("div");e.className="s-products-list-selectable-item",e.product=s;const i=this.selectedProducts.has(s.id);i&&e.classList.add("s-products-list-item-selected");const r=document.createElement("label");r.className="s-products-list-select-control",r.setAttribute("aria-label",salla.lang.get("common.elements.select","تحديد"));const o=document.createElement("input");return o.type="checkbox",o.className="s-products-list-select-checkbox",o.checked=i,o.addEventListener("change",(()=>this.toggleSelection(s,e,o.checked))),r.appendChild(o),e.appendChild(r),e.appendChild(t),e}toggleSelection(t,s,e){e?(this.selectedProducts.set(t.id,t),s?.classList.add("s-products-list-item-selected")):(this.selectedProducts.delete(t.id),s?.classList.remove("s-products-list-item-selected")),this.emitSelection()}emitSelection(){const t=Array.from(this.selectedProducts.values()),s=Array.from(this.selectedProducts.keys()),e={ids:s,products:t,count:s.length};this.selectionChanged.emit(e),salla.event.emit("salla-products-list::selection.changed",e)}appendProductCards(t){this.wrapper&&((Array.isArray(t)?t:[t]).forEach((t=>this.wrapper.append(t))),this.onWishlistStorageSynced())}refreshWishlistIconsAfterHydration(){return salla.wishlist.api.syncStorageFromServer()}onSelectableChanged(t,s){t!==s&&this.isReady&&this.wrapper&&(t||(this.selectedProducts.clear(),this.emitSelection()),this.reload())}applyLandingPageStyles(t){"landing-page"!==this.getSource()||this.hasCustomComponent||(t.toggleAttribute("hide-add-btn",!0),t.classList.add("s-product-card-fit-height"))}applyHorizontalCardStyles(t){this.horizontalCards&&(t.toggleAttribute("horizontal",!0),this.hasCustomComponent||t.toggleAttribute("shadow-on-hover",!0))}waitForResizing(t){let s=null;return new Promise((e=>{const i=new ResizeObserver((()=>{clearTimeout(s),s=setTimeout((()=>{i.disconnect(),e(null)}),160)}));i.observe(t)}))}waitForLayoutStable(t){let s=null,e=null;return new Promise((i=>{let r;const o=()=>{clearTimeout(s),clearTimeout(e),r.disconnect(),i(null)};r=new MutationObserver((()=>{clearTimeout(s),s=setTimeout(o,160)})),r.observe(t,{childList:!0,subtree:!0,attributes:!0}),e=setTimeout(o,1e3)}))}async waitForStableLayout(t){return await Promise.allSettled([this.waitForResizing(t),this.waitForLayoutStable(t)])}scrollToLastViewedProduct(){const t=sessionStorage.getItem(this.lastViewedProductKey);t&&!salla.url.is_page("product.single")&&this.isElementLoaded(`[id*="${t}"]`).then((()=>{const s=this.wrapper?.querySelector(`[id*="${t}"]`);if(!s)return;const e=()=>{const t=()=>{s.scrollIntoView({block:"start",behavior:"instant"});const t=matchMedia("(max-width: 1024px)").matches?"header .inner":"ul.main-menu",e=window?.header_is_sticky?document.querySelector(t)?.getBoundingClientRect()?.height??56:0,i=parseInt(getComputedStyle(this.wrapper).rowGap)??16;scrollBy({top:-1*(e+i),behavior:"instant"})};requestAnimationFrame(t),s.querySelectorAll("img.lazy").forEach((s=>{const e=s,i=()=>{requestAnimationFrame(t),e.onload=e.onerror=null};e.onload=i,e.onerror=i})),this.removeScrollRestorationSession()};this.waitForStableLayout(this.host).then((()=>requestAnimationFrame(e)))}))}isElementLoaded(t){return new Promise((s=>{const e=setInterval((()=>{if(document.querySelector(t))return clearInterval(e),s(document.querySelector(t))}),50)}))}takeStateSnapshot(){const t=[];for(let s=0;s<this.wrapper.children.length;s++){const e=this.wrapper.children?.[s];t.push(e.product)}const s={pageIndex:Math.max((this.infiniteScroll?.pageIndex??1)-1,1),nextPage:this.nextPage,currentPageData:t};if(this.isFilterable()){const t=sessionStorage.getItem(this.filtersKey);sessionStorage.setItem(this.filtersKey,t||JSON.stringify(this.filtersSnapshot))}sessionStorage.setItem(this.infiniteScrollStateKey,JSON.stringify(s));let e=salla.config.get("page.id");const i=Object.keys(this.specialPagesWithoutIds).find((t=>salla.url.is_page(t)));i?e=this.getCategoryIdentity(this.specialPagesWithoutIds[i]):null!==e&&(e=String(e)),sessionStorage.setItem(this.prevCategoryIdKey,e)}getCategoryIdentity(t){if("search"!==t)return t;const s=`search:${a.getProductsSourceValue(this.source,this.sourceValue)}`;return this.isSearchPageList()?`${s}:sort:${this.sortBy||"relevance"}`:s}removeScrollRestorationSession(){this.isFilterable()||sessionStorage.removeItem(this.filtersKey),sessionStorage.removeItem(this.infiniteScrollStateKey),sessionStorage.removeItem(this.lastViewedProductKey),sessionStorage.removeItem(this.prevCategoryIdKey)}loadStoredScrollState(){const t=sessionStorage.getItem(this.infiniteScrollStateKey),s=sessionStorage.getItem(this.filtersKey),e=sessionStorage.getItem(this.prevCategoryIdKey),i=this.getCategoryIdentity(this.specialPagesWithoutIds[salla.config.get("page.slug")]||null),r=salla.config.get("page.id"),o=salla.url.is_page("index"),a=salla.url.is_page("product.single"),n=i?e!==i:e!==String(r);if(e&&n&&!o&&!a||o&&!this.hasInfiniteScroll)return this.removeScrollRestorationSession(),this.switchToNormalBehavior=!0,!1;if(a)return this.switchToNormalBehavior=!0,!1;if(t)try{const{pageIndex:e,nextPage:i,currentPageData:r}=JSON.parse(t);if(s&&"undefined"!==s){const t=JSON.parse(s);this.filtersSnapshot=JSON.parse(JSON.stringify(t)),salla.event.emit("filters::fetched",{filters:t})}return this.page=e,this.nextPage=i,this.appendProductCards(r.map((t=>this.getItemHTML(t)))),!0}catch(t){console.error("Failed to load stored scroll state:",t),this.removeScrollRestorationSession()}return!1}getSource(){return a.getProductsSource(this.source)}isAuxiliaryProductsListSource(){return["json","selected","related","landing-page","recently"].includes(this.getSource())}toCategoryIdFilter(t){return Array.isArray(t)?t:t&&"object"==typeof t?Object.values(t):[t]}getSourceValue(){if("search"===this.getSource())return a.getProductsSourceValue(this.source,this.sourceValue);if("wishlist"===this.getSource()){const t=new URLSearchParams(window.location.search),s=t.getAll("source_value[]").length?t.getAll("source_value[]"):t.getAll("source_value");if(s.length)return s}return this.currentCategoryIdFilter?this.currentCategoryIdFilter:a.getProductsSourceValue(this.source,this.sourceValue)}getResponseHeader(t,s){if(!t)return;if("function"==typeof t.get)return t.get(s)||void 0;const e=t[s]??t[s.toLowerCase()];return"string"==typeof e?e:Array.isArray(e)&&"string"==typeof e[0]?e[0]:void 0}logFetchError(t,s,e,i){try{const r=s instanceof Error?s.name:void 0,o=s instanceof Error?s.message:String(s),a=i?.url||e,n=this.getResponseHeader(i?.headers,"cf-ray"),l=this.getResponseHeader(i?.headers,"cf-mitigated"),c=this.getResponseHeader(i?.headers,"server"),h="challenge"===l?.toLowerCase()||403===i?.status&&(!!n||!!c?.toLowerCase().includes("cloudflare")),d=`${r||""} ${o}`;let p="processing"===t?"processing":"unknown";"fetch"===t&&(h?p="cloudflare":/(?:^|\/)null(?:[/?#]|$)/i.test(a||"")?p="invalid_url":/timeout|timed out|abort/i.test(d)?p="timeout":!i?.status&&/fetch|network|load failed|connection/i.test(d)?p="network":i?.status&&(p="http")),salla.analytics?.log("salla::products.list.fetch.error",{errorPhase:t,failureType:p,cloudflareBlock:h,sourceList:this.getSource(),pageIndex:this.infiniteScroll?.pageIndex,httpStatus:i?.status,responseUrl:a,cfRay:n,cfMitigated:l,errorName:r,errorMessage:o.slice(0,500)})}catch{}}appendDataLayer(t){"object"==typeof dataLayer&&Array.isArray(dataLayer)&&dataLayer.push({event:"impressions",ecommerce:{currencyCode:salla.config.currency().code,impressions:t.map(((t,s)=>({id:t.id,name:t.name,price:t.price,brand:t.brand?.name||"",quantity:t.quantity,categories:[{name:t.category?.name||salla.config.get("page.title"),id:salla.config.get("page.id")}],category:t.category?.name||salla.config.get("page.title"),position:s+1})))}})}initiateInfiniteScroll(){if(!this.hasInfiniteScroll)return;const t=this.autoload&&this.includes&&this.includes.length>0;this.infiniteScroll=salla.infiniteScroll.initiate(this.wrapper,this.wrapper,{path:()=>this.nextPage,history:!1,nextPage:this.nextPage,scrollThreshold:!t&&!!this.autoload&&100,loadOnScroll:!t&&this.autoload},!0),this.infiniteScroll.pageIndex=this.page,this.infiniteScroll?.on("request",(()=>{this.loading(!0,!this.autoload)})),t&&window.addEventListener("scroll",this.boundHandleScroll),this.infiniteScroll?.on("load",(async(t,s,e)=>{if(!this.isProcessing){this.isProcessing=!0;try{try{const s=e?.headers?.get?.("s-request-id")||t?.request_id;s&&(this.requestId=s)}catch{}if(!t.data?.length&&2===this.infiniteScroll.pageIndex)return this.showPlaceholder=!0,salla.infiniteScroll.destroy(this.infiniteScroll),this.loading(!1),void(this.placeholderLoader&&this.placeholderLoader.remove());this.includes&&await this.injectAndProcessData(t);const s=await this.handleResponse(t);this.infiniteScroll.appendItems(s),this.onWishlistStorageSynced(),2===this.infiniteScroll.pageIndex&&(!this.autoload&&this.nextPage&&(this.loadMoreWrapper.style.display="block"),this.animateItems(),this.refreshInfiniteScrollMeasurements())}catch(t){console.error("Error during load:",t),this.logFetchError("processing",t,"string"==typeof s?s:void 0,e)}finally{this.isProcessing=!1}}})),this.infiniteScroll?.on("error",((t,s,e)=>{const i=e;this.status.querySelector(".s-infinite-scroll-error").classList.remove("s-hidden"),this.placeholderLoader&&this.placeholderLoader.remove(),this.loading(!1),this.isProcessing=!1,this.logFetchError("fetch",t,s,i)})),salla.onReady((()=>{sessionStorage.getItem(this.infiniteScrollStateKey)||this.manualLoadNextPage()}))}handleScroll(){this.isProcessing||this.scrollTimeout||(this.scrollTimeout=setTimeout((()=>{this.scrollTimeout=null,requestAnimationFrame((()=>{const t=this.wrapper.getBoundingClientRect(),s=window.innerHeight;t.bottom-s<=200&&!this.isProcessing&&this.nextPage&&this.manualLoadNextPage()}))}),200))}manualLoadNextPage(){this.nextPage&&this.infiniteScroll.loadNextPage()}refreshInfiniteScrollMeasurements(){this.autoload&&this.infiniteScroll?.updateMeasurements&&this.waitForStableLayout(document.body).then((()=>this.infiniteScroll?.updateMeasurements?.()))}async applyBeforeBuildListUrl(t){try{const s={component:this,url:t};return await salla.hooks.call("salla-products-list","beforeBuildListUrl",s),s.url}catch(s){return salla.logger.warn("beforeBuildListUrl hook failed",s?.message),t}}async resolveNextPageFromCursor(t){return t.cursor?t.cursor.next?await this.applyBeforeBuildListUrl(t.cursor.next):t.cursor.next:this.nextPage}async injectAndProcessData(t){try{await a.injectExtraFieldsToResponse(t)}catch(t){console.error("Error injecting data:",t)}}getInitialData(){return this.loading(),salla.api.withoutNotifier((()=>salla.product.api.fetch({source:a.getApiSource(this.getSource()),source_value:this.getSourceValue(),limit:this.limit,...this.isSearchPageList()&&this.sortBy?{sort:this.sortBy}:{}}).catch((t=>{const s=t?.response,e=s?.request?.responseURL||t?.config?.url;throw this.logFetchError("fetch",t,e,{status:s?.status,url:e,headers:s?.headers}),t})).then((async t=>t.data.length?(await a.injectExtraFieldsToResponse(t),this.firstPageResponse?void this.appendProductCards(await this.handleResponse(t)):(this.firstPageResponse=t,void(this.nextPage=await this.resolveNextPageFromCursor(t)))):(this.showPlaceholder=!0,this.placeholderLoader&&this.placeholderLoader.remove(),void this.loading(!1))))))}async loadMore(){this.infiniteScroll?.loadNextPage()}async getSelected(){return{ids:Array.from(this.selectedProducts.keys()),products:Array.from(this.selectedProducts.values())}}async getLoadedProducts(){const t=[];if(!this.wrapper)return t;for(let s=0;s<this.wrapper.children.length;s++){const e=this.wrapper.children[s];e?.product&&!e.hasAttribute("data-out-of-stock-hidden")&&t.push(e.product)}return t}async selectAll(){if(this.selectable&&this.wrapper){for(let t=0;t<this.wrapper.children.length;t++){const s=this.wrapper.children[t];if(s?.product&&!s.hasAttribute("data-out-of-stock-hidden")){this.selectedProducts.set(s.product.id,s.product),s.classList.add("s-products-list-item-selected");const t=s.querySelector(".s-products-list-select-checkbox");t&&(t.checked=!0)}}this.emitSelection()}}async clearSelection(){this.selectedProducts.clear(),this.wrapper&&(this.wrapper.querySelectorAll(".s-products-list-select-checkbox").forEach((t=>t.checked=!1)),this.wrapper.querySelectorAll(".s-products-list-item-selected").forEach((t=>t.classList.remove("s-products-list-item-selected")))),this.emitSelection()}isSearchPageList(){return"search"===this.getSource()&&"product.index.search"===this.currentPage?.slug&&!0===this.filtersResults}syncSearchSortControl(){if(!this.isSearchPageList()||this.sortBy)return;const t=document.querySelector("#product-filter");if(t&&"SELECT"===t.tagName){if(!t.querySelector('option[value=""]')){const s=document.createElement("option");s.setAttribute("value",""),s.textContent=salla.lang.getWithDefault("common.elements.search_results",salla.lang.get("pages.categories.sorting")),t.insertBefore(s,t.firstChild)}t.value=""}}componentWillLoad(){return salla.onReady().then((async()=>{this.hasCustomComponent=!!customElements.get(this.productCardComponent),this.sourceValueIsValid=!(!this.getSourceValue()&&!this.isSourceWithoutValue()),this.hasInfiniteScroll=!this.isAuxiliaryProductsListSource()&&!this.limit;let t=new URLSearchParams(window.location.search);try{const s=t.get("sort")||t.get("by");this.sortBy=this.isSearchPageList()?s||void 0:this.sortBy||s,this.parsedFilters=a.extractFiltersFromUrl(t),this.parsedFilters&&this.parsedFilters.category_id&&(this.currentCategoryIdFilter=this.toCategoryIdFilter(this.parsedFilters.category_id))}catch(t){salla.logger.warn("failed to get filters from url",t.message)}if(await this.buildNextPageUrl(),this.isReady=!0,!sessionStorage.getItem(this.infiniteScrollStateKey))if(this.sourceValueIsValid){if(!this.hasInfiniteScroll){if("json"===this.getSource())return this.getSourceValue().length?void setTimeout((()=>{this.appendProductCards(this.getSourceValue().map((t=>this.getItemHTML(t))))})):void(this.showPlaceholder=!0);if("selected"!==this.getSource()||this.getSourceValue().length)return this.getInitialData();this.showPlaceholder=!0}}else salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`)}))}async componentDidLoad(){this.syncSearchSortControl(),this.hasInfiniteScroll&&this.init(),await Salla.hooks.registerComponent("salla-products-list",this),this.loadStoredScrollState()?(this.autoload?!this.nextPage&&this.loading(!1):this.nextPage?this.loadMoreWrapper&&(this.loadMoreWrapper.style.display="block"):(this.loadMoreWrapper&&(this.loadMoreWrapper.style.display="none"),this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden")),this.scrollToLastViewedProduct(),this.refreshInfiniteScrollMeasurements()):!this.firstPageResponse&&this.switchToNormalBehavior?this.getInitialData().then((async()=>{this.firstPageResponse?(this.appendProductCards(await this.handleResponse(this.firstPageResponse,!1)),setTimeout((()=>{if(!this.autoload&&this.nextPage&&1==this.infiniteScroll?.pageIndex){const t=this.host.querySelector(".s-infinite-scroll-wrapper");t&&(t.style.display="block")}}))):console.error("No response received after getInitialData.")})).catch((t=>{console.error("Error during initial data fetch:",t)})):this.firstPageResponse&&this.appendProductCards(await this.handleResponse(this.firstPageResponse,!1)),await this.refreshWishlistIconsAfterHydration()}canRender(){return this.sourceValueIsValid&&this.isReady}render(){return this.canRender()?this.showPlaceholder?e("div",{class:"s-products-list-placeholder"},e("span",{innerHTML:o}),e("p",null,this.placeholderText)):e(i,{class:"s-products-list"},e("div",{class:{"s-products-list-wrapper":!0,"s-products-list-horizontal-cards":this.horizontalCards&&!this.filtersResults,"s-products-list-vertical-cards":!this.horizontalCards&&!this.rowCards&&!this.filtersResults,"s-products-list-row-cards":this.rowCards,"s-products-list-compact-cards":this.compactCards,"s-products-list-filters-results":this.filtersResults},ref:t=>this.wrapper=t}),e("div",{class:"s-infinite-scroll-status",ref:t=>this.status=t},e("p",{class:"s-infinite-scroll-last infinite-scroll-last s-hidden"},this.endOfText),e("p",{class:"s-infinite-scroll-error infinite-scroll-error s-hidden"},this.failedLoadMore)),this.autoload&&e("div",{class:"s-products-list-loading-wrapper",style:{display:"none"},ref:t=>this.loader=t},e("span",{class:"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader"})),this.hasInfiniteScroll&&this.nextPage&&!this.autoload?e("div",{class:"s-infinite-scroll-wrapper",style:{display:"none"},ref:t=>this.loadMoreWrapper=t},e("button",{onClick:()=>this.loadMore(),class:"s-infinite-scroll-btn s-button-btn s-button-primary"},e("span",{class:"s-button-text s-infinite-scroll-btn-text"},this.loadMoreText?this.loadMoreText:salla.lang.get("common.elements.load_more")),e("span",{class:"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader",ref:t=>this.btnLoader=t,style:{display:"none"}}))):""):""}init(){this.initiateInfiniteScroll(),this.loading()}async handleResponse(t,s=!0){if(!t)return[];t._requestId&&(this.requestId=t._requestId);let e=this.getSource();if(1===t.cursor?.current){if(!this.isAuxiliaryProductsListSource()){let s=a.getPageTitleForSource(e);try{if("search"===this.getSource())s=salla.lang.get("common.elements.search_about",{word:a.escapeHtml(this.getSourceValue())});else if(!s){let e=Object.keys(this.parsedFilters||{}).length?null:this.getSourceValue()[0];s=t.filters?.find((t=>"category_id"===t.key))?.values?.find((t=>t.key==e))?.value??""}s+=(s?" - ":"")+salla.lang.choice("blocks.header.products_count",t.data?.length),15===t.data.length&&(s=s.replace(t.data.length,salla.lang.get("common.elements.more_than")+" "+t.data.length)),t.title=s}catch(t){salla.logger.error("Error::falid to handle response",t)}}a.generateProductSchema(t.data)}this.appendDataLayer(t.data),t.nextPage=this.nextPage,t.source=this.getSource(),t.sourceValue=this.getSourceValue(),salla.event.emit("salla-products-list::products.fetched",t),this.productsFetched.emit(t),this.emitFilters(t),s&&(this.nextPage=await this.resolveNextPageFromCursor(t)),this.loading(!1),this.placeholderLoader&&this.placeholderLoader.remove(),this.hasInfiniteScroll&&!this.nextPage&&(this.infiniteScroll.option({scrollThreshold:!1,loadOnScroll:!1}),this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden"));let i=await this.applyBeforeAppendItems(t.data);const r=[];for(let t=0;t<i.length;t++)r.push(this.getItemHTML(i[t]));return r}async applyBeforeAppendItems(t){const s={component:this,items:t};try{return await salla.hooks.call("salla-products-list","beforeAppendItems",s),Array.isArray(s.items)?s.items:t}catch{return t}}get host(){return r(this)}static get watchers(){return{selectable:["onSelectableChanged"]}}};n.style="/*!twlt*/.s-products-list-selectable-item{position:relative;border-radius:0.5rem;transition:box-shadow 0.15s ease-in-out}.s-products-list-item-selected{box-shadow:0 0 0 2px var(--color-primary)}.s-products-list-select-control{position:absolute;top:10px;inset-inline-start:10px;z-index:5;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.s-products-list-select-checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;width:22px;height:22px;margin:0;cursor:pointer;color:var(--color-primary);border:1px solid rgba(0, 0, 0, 0.15);border-radius:6px;background-color:#fff;box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out}.s-products-list-select-checkbox:hover{border-color:var(--color-primary)}.s-products-list-select-checkbox:focus,.s-products-list-select-checkbox:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2), 0 0 0 3px color-mix(in srgb, var(--color-primary) 30%, transparent)}.s-products-list-select-checkbox:checked,.s-products-list-select-checkbox:checked:hover,.s-products-list-select-checkbox:checked:focus{background-color:var(--color-primary);border-color:var(--color-primary)}.s-products-list-select-checkbox:checked::after{content:\"\";position:absolute;top:50%;left:50%;width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%, -60%) rotate(45deg)}.s-products-list-row-cards .s-products-list-select-control{top:50%;inset-inline-start:14px;transform:translateY(-50%)}.s-products-list-row-cards .s-products-list-selectable-item>:not(.s-products-list-select-control){padding-inline-start:2.75rem}.s-products-list-item-animate{animation:s-products-list-item-in 1200ms linear both}@keyframes s-products-list-item-in{0%{opacity:0;transform:translateY(20px)}5%{opacity:0.428;transform:translateY(11.44px)}10%{opacity:0.845;transform:translateY(3.09px)}15%{opacity:1;transform:translateY(-2.19px)}20%{opacity:1;transform:translateY(-4.05px)}25%{opacity:1;transform:translateY(-3.54px)}30%{opacity:1;transform:translateY(-2.02px)}35%{opacity:1;transform:translateY(-0.55px)}40%{opacity:0.981;transform:translateY(0.39px)}45%{opacity:0.964;transform:translateY(0.72px)}50%{opacity:0.969;transform:translateY(0.62px)}55%{opacity:0.982;transform:translateY(0.36px)}60%{opacity:0.995;transform:translateY(0.1px)}65%{opacity:1;transform:translateY(-0.07px)}70%{opacity:1;transform:translateY(-0.13px)}75%{opacity:1;transform:translateY(-0.11px)}80%{opacity:1;transform:translateY(-0.06px)}85%{opacity:1;transform:translateY(-0.02px)}90%{opacity:0.999;transform:translateY(0.01px)}95%{opacity:0.999;transform:translateY(0.02px)}100%{opacity:1;transform:translateY(0px)}}.fixed{position:fixed}.sticky{position:sticky}.block{display:block}.grid{display:grid}.hidden{display:none}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.s-products-list-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:2.5rem;padding-bottom:5rem;--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.s-products-list-placeholder p{padding-top:0.5rem;text-align:center;--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.s-products-list-placeholder span{margin-bottom:1rem;display:flex;height:8rem;width:8rem;align-items:center;justify-content:center;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1));font-size:3rem;line-height:1;--tw-text-opacity:1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.s-products-list-placeholder span svg{margin-left:auto;margin-right:auto;height:4rem;width:4rem;fill:#d1d5db;text-align:center}.s-button-btn{position:relative;display:inline-flex;flex:1 1 0%;user-select:none;flex-direction:row-reverse;align-items:center;justify-content:center;white-space:nowrap;border-radius:var(--s-radius, 0.25rem);border-style:solid;padding-left:1.5rem;padding-right:1.5rem;padding-bottom:0.625rem;padding-top:0.5rem;font-size:0.875rem;line-height:1.25rem;font-weight:700;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:300ms}.s-button-btn:hover{opacity:0.8}.s-button-primary{border-width:1px;border-color:var(--color-primary);background-color:var(--color-primary);color:var(--color-primary-reverse)}.s-button-primary:hover{background-color:var(--color-primary-dark)}.s-button-text{pointer-events:none;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:300ms}.s-button-loader{margin-left:0.5rem;margin-right:0.5rem;display:flex;align-items:center;justify-content:center;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.s-button-loader::before{display:inline-block;height:1rem;content:var(--tw-content);width:1rem}@keyframes spin{to{content:var(--tw-content);transform:rotate(360deg)}}.s-button-loader::before{animation:spin 1s linear infinite;border-radius:9999px;border-width:2px;border-style:solid;border-top-color:var(--color-primary);border-left-color:var(--color-primary);border-bottom-color:rgb(243 244 246 / var(--tw-border-opacity, 1));--tw-border-opacity:1;border-right-color:rgb(243 244 246 / var(--tw-border-opacity, 1));--tw-content:'';content:var(--tw-content)}.s-button-loader-center .s-button-loader{position:absolute;top:50%;left:50%;margin:0px !important;--tw-translate-y:-50%;--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.s-comments-item-like-btn .s-button-text{display:flex;flex-direction:row-reverse;gap:0.5rem}.s-hidden{display:none}.s-offer-products-list-single-column .s-products-list-wrapper{display:grid !important;grid-template-columns:repeat(1, minmax(0, 1fr)) !important;gap:0.75rem}.s-offer-drawer-card .s-products-list-compact-cards{margin-bottom:0px !important}.s-order-edit-products-list .s-products-list-wrapper{gap:1rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media (min-width: 769px){.s-order-edit-products-list .s-products-list-wrapper{grid-template-columns:repeat(3, minmax(0, 1fr))}}.s-order-edit-mobile-products-modal .products-list .s-products-list-wrapper{gap:0.625rem;grid-template-columns:repeat(2,minmax(0,1fr))}.s-products-list-wrapper{margin-bottom:2rem;display:grid}.s-products-list-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:2.5rem;padding-bottom:5rem;--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.s-products-list-placeholder p{padding-top:0.5rem;text-align:center;--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.s-products-list-row-cards{display:grid;gap:1rem}.s-products-list-vertical-cards{grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.625rem}@media (min-width: 640px){.s-products-list-vertical-cards{gap:1rem}}@media (min-width: 768px){.s-products-list-vertical-cards{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5rem}}@media (min-width: 1024px){.s-products-list-vertical-cards{grid-template-columns:repeat(4, minmax(0, 1fr))}}.s-products-list-loading-wrapper{display:flex;height:5rem;align-items:center;justify-content:center}.s-products-list-filters-results{grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.625rem}@media (min-width: 640px){.s-products-list-filters-results{gap:1rem}}@media (min-width: 768px){.s-products-list-filters-results{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5rem}}.s-products-list-horizontal-cards{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1rem}@media (min-width: 640px){.s-products-list-horizontal-cards{gap:2rem}}@media (min-width: 1024px){.s-products-list-horizontal-cards{grid-template-columns:repeat(2, minmax(0, 1fr))}}.s-products-list-compact-cards{display:flex !important;flex-direction:column !important;gap:0px !important}.s-products-list-placeholder span{margin-bottom:1rem;display:flex;height:8rem;width:8rem;align-items:center;justify-content:center;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1));font-size:3rem;line-height:1;--tw-text-opacity:1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.s-products-list-placeholder span svg{margin-left:auto;margin-right:auto;height:4rem;width:4rem;fill:#d1d5db;text-align:center}/*!twlt*/.s-button-btn{position:relative;display:inline-flex;flex:1 1 0%;user-select:none;flex-direction:row-reverse;align-items:center;justify-content:center;white-space:nowrap;border-radius:var(--s-radius, 0.25rem);border-style:solid;padding-left:1.5rem;padding-right:1.5rem;padding-bottom:0.625rem;padding-top:0.5rem;font-size:0.875rem;line-height:1.25rem;font-weight:700;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:300ms}.s-button-btn:hover{opacity:0.8}.s-button-primary{border-width:1px;border-color:var(--color-primary);background-color:var(--color-primary);color:var(--color-primary-reverse)}.s-button-primary:hover{background-color:var(--color-primary-dark)}.s-button-text{pointer-events:none;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:300ms}.s-button-loader{margin-left:0.5rem;margin-right:0.5rem;display:flex;align-items:center;justify-content:center;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.s-button-loader::before{display:inline-block;height:1rem;content:var(--tw-content);width:1rem}@keyframes spin{to{content:var(--tw-content);transform:rotate(360deg)}}.s-button-loader::before{animation:spin 1s linear infinite;border-radius:9999px;border-width:2px;border-style:solid;border-top-color:var(--color-primary);border-left-color:var(--color-primary);border-bottom-color:rgb(243 244 246 / var(--tw-border-opacity, 1));--tw-border-opacity:1;border-right-color:rgb(243 244 246 / var(--tw-border-opacity, 1));--tw-content:'';content:var(--tw-content)}.s-button-loader-center .s-button-loader{position:absolute;top:50%;left:50%;margin:0px !important;--tw-translate-y:-50%;--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.s-comments-item-like-btn .s-button-text{display:flex;flex-direction:row-reverse;gap:0.5rem}.s-infinite-scroll-wrapper{margin-top:1rem;text-align:center}.s-infinite-scroll-last{margin:0px;text-align:center}.s-infinite-scroll-error{margin:0px;text-align:center}";export{n as salla_products_list}
|