@salla.sa/twilight-components 2.14.507 → 2.14.508
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/catalog-recommendations-dtK9Dlfw.js +97 -0
- package/dist/cjs/{filepond-CvJ5cEog.js → filepond-C1mPvQ8T.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-poster-BaTGVcva.js → filepond-plugin-file-poster-B-pZ8apM.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-size-DLrFHUWL.js → filepond-plugin-file-validate-size-CsE7s9Zn.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-type-BU1HIA61.js → filepond-plugin-file-validate-type-pm3Q3QSJ.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-edit-CF5DJ9dM.js → filepond-plugin-image-edit-DLXp4kE0.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-exif-orientation-DLrU2VJ-.js → filepond-plugin-image-exif-orientation-hH92QKy-.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-preview-D_3BTg6j.js → filepond-plugin-image-preview-CVbeEopx.js} +1 -1
- package/dist/cjs/{functions-Chjqknfu.js → functions-CRoHuI_r.js} +1 -1
- package/dist/cjs/{index-D4085yXe.js → index-Bz-aFSt9.js} +1 -1
- package/dist/cjs/{index-DDEOCBF1.js → index-hhUDuquL.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/salla-accordion-body_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-accordion_6.cjs.entry.js +1 -1
- 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-apps-icons.cjs.entry.js +1 -1
- package/dist/cjs/salla-badge.cjs.entry.js +1 -1
- package/dist/cjs/salla-basket-gap.cjs.entry.js +2 -2
- package/dist/cjs/salla-booking-field_7.cjs.entry.js +10 -10
- package/dist/cjs/salla-bullet-delivery_2.cjs.entry.js +1 -1
- 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_8.cjs.entry.js +1 -1
- 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_2.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 +1 -1
- package/dist/cjs/salla-filters.cjs.entry.js +1 -1
- package/dist/cjs/salla-fulfillment-methods.cjs.entry.js +1 -1
- package/dist/cjs/salla-gifting.cjs.entry.js +1 -1
- package/dist/cjs/salla-hook.cjs.entry.js +1 -1
- package/dist/cjs/salla-infinite-scroll.cjs.entry.js +1 -1
- 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.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty-exchange-product-card_5.cjs.entry.js +3 -3
- package/dist/cjs/salla-loyalty-hero_2.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty-panel.cjs.entry.js +3 -3
- 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-program.cjs.entry.js +3 -3
- package/dist/cjs/salla-loyalty-reward.cjs.entry.js +2 -2
- 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_2.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.cjs.entry.js +1 -1
- package/dist/cjs/salla-notifications.cjs.entry.js +1 -1
- package/dist/cjs/salla-offer-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-offer.cjs.entry.js +1 -1
- 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-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 +1 -1
- 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_2.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 +1 -1
- package/dist/cjs/salla-quick-order.cjs.entry.js +1 -1
- package/dist/cjs/salla-rating-modal-v2.cjs.entry.js +1 -1
- package/dist/cjs/salla-rating-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-review-factors-tags.cjs.entry.js +1 -1
- package/dist/cjs/salla-scopes.cjs.entry.js +1 -1
- package/dist/cjs/salla-search.cjs.entry.js +1 -1
- package/dist/cjs/salla-skeleton.cjs.entry.js +1 -1
- package/dist/cjs/salla-slider.cjs.entry.js +1 -1
- package/dist/cjs/salla-social-share.cjs.entry.js +10 -3
- 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-tiered-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-tooltip.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/{tracked-promise-C69FwhCX.js → tracked-promise--XbBsK1N.js} +1 -1
- package/dist/cjs/twilight.cjs.js +1 -1
- package/dist/cjs/{vanilla-picker-BDDWkkNu.js → vanilla-picker-D_g2rKwM.js} +1 -1
- package/dist/collection/components/salla-social-share/salla-social-share.js +9 -2
- package/dist/collection/shared/catalog-recommendations.js +47 -41
- package/dist/components/catalog-recommendations.js +47 -41
- package/dist/components/index.js +2 -2
- package/dist/components/salla-social-share2.js +9 -2
- package/dist/esm/catalog-recommendations-CL7OPpYS.js +94 -0
- package/dist/esm/{filepond-BfxOWgeR.js → filepond-CA6zTz9c.js} +1 -1
- package/dist/esm/{filepond-plugin-file-poster-Dt5Vnuk4.js → filepond-plugin-file-poster-DOWZmTt9.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-size-D5WrsM0T.js → filepond-plugin-file-validate-size-CW4aTVdl.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-type-CjaeW32q.js → filepond-plugin-file-validate-type-DiGUQ5qM.js} +1 -1
- package/dist/esm/{filepond-plugin-image-edit-BTzFile_.js → filepond-plugin-image-edit-BOu5ykhi.js} +1 -1
- package/dist/esm/{filepond-plugin-image-exif-orientation-DSNjqS_v.js → filepond-plugin-image-exif-orientation-C9OxiFhh.js} +1 -1
- package/dist/esm/{filepond-plugin-image-preview-CCGiOVLr.js → filepond-plugin-image-preview-BCRRj5t-.js} +1 -1
- package/dist/esm/{functions-D05iBLQe.js → functions-Cdhve8oP.js} +1 -1
- package/dist/esm/{index-BTUirq4N.js → index-DMTmdoWu.js} +1 -1
- package/dist/esm/{index-DpTbeb50.js → index-DWPgHXOD.js} +2 -2
- package/dist/esm/loader.js +2 -2
- package/dist/esm/salla-accordion-body_2.entry.js +1 -1
- package/dist/esm/salla-accordion_6.entry.js +1 -1
- 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-apps-icons.entry.js +1 -1
- package/dist/esm/salla-badge.entry.js +1 -1
- package/dist/esm/salla-basket-gap.entry.js +2 -2
- package/dist/esm/salla-booking-field_7.entry.js +10 -10
- package/dist/esm/salla-bullet-delivery_2.entry.js +1 -1
- 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_8.entry.js +1 -1
- 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_2.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 +1 -1
- package/dist/esm/salla-filters.entry.js +1 -1
- package/dist/esm/salla-fulfillment-methods.entry.js +1 -1
- package/dist/esm/salla-gifting.entry.js +1 -1
- package/dist/esm/salla-hook.entry.js +1 -1
- package/dist/esm/salla-infinite-scroll.entry.js +1 -1
- 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.entry.js +2 -2
- package/dist/esm/salla-loyalty-exchange-product-card_5.entry.js +3 -3
- package/dist/esm/salla-loyalty-hero_2.entry.js +2 -2
- package/dist/esm/salla-loyalty-panel.entry.js +3 -3
- 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-program.entry.js +3 -3
- package/dist/esm/salla-loyalty-reward.entry.js +2 -2
- package/dist/esm/salla-loyalty.entry.js +1 -1
- package/dist/esm/salla-maintenance-alert.entry.js +1 -1
- package/dist/esm/salla-map_2.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.entry.js +1 -1
- package/dist/esm/salla-notifications.entry.js +1 -1
- package/dist/esm/salla-offer-modal.entry.js +1 -1
- package/dist/esm/salla-offer.entry.js +1 -1
- 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-summary.entry.js +1 -1
- package/dist/esm/salla-order-totals-card.entry.js +1 -1
- package/dist/esm/salla-orders.entry.js +1 -1
- 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_2.entry.js +1 -1
- package/dist/esm/salla-product-size-guide.entry.js +1 -1
- package/dist/esm/salla-products-list.entry.js +1 -1
- package/dist/esm/salla-quick-order.entry.js +1 -1
- package/dist/esm/salla-rating-modal-v2.entry.js +1 -1
- package/dist/esm/salla-rating-modal.entry.js +1 -1
- package/dist/esm/salla-review-factors-tags.entry.js +1 -1
- package/dist/esm/salla-scopes.entry.js +1 -1
- package/dist/esm/salla-search.entry.js +1 -1
- package/dist/esm/salla-skeleton.entry.js +1 -1
- package/dist/esm/salla-slider.entry.js +1 -1
- package/dist/esm/salla-social-share.entry.js +10 -3
- package/dist/esm/salla-social.entry.js +1 -1
- package/dist/esm/salla-tab-content_3.entry.js +1 -1
- package/dist/esm/salla-tiered-offer.entry.js +1 -1
- package/dist/esm/salla-tooltip.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/{tracked-promise-DBueMSK5.js → tracked-promise-BCGZPTbE.js} +1 -1
- package/dist/esm/twilight.js +2 -2
- package/dist/esm/{vanilla-picker-CWFpeA2O.js → vanilla-picker-DFTSHsGD.js} +1 -1
- package/dist/twilight/{p-374bbf0c.entry.js → p-01a74537.entry.js} +1 -1
- package/dist/twilight/{p-1cac053d.entry.js → p-04a34073.entry.js} +1 -1
- package/dist/twilight/{p-7c0ffbd5.entry.js → p-08c1f879.entry.js} +1 -1
- package/dist/twilight/{p-6f74c650.entry.js → p-0b72c43b.entry.js} +1 -1
- package/dist/twilight/{p-61c2bd59.entry.js → p-0fd7d436.entry.js} +1 -1
- package/dist/twilight/{p-163f862d.entry.js → p-123a3a37.entry.js} +1 -1
- package/dist/twilight/{p-3a41ac1c.entry.js → p-12d9c95b.entry.js} +1 -1
- package/dist/twilight/{p-b25dc971.entry.js → p-17c02185.entry.js} +1 -1
- package/dist/twilight/{p-92f654cd.entry.js → p-196e416c.entry.js} +1 -1
- package/dist/twilight/{p-5b2a71b6.entry.js → p-1b858716.entry.js} +1 -1
- package/dist/twilight/{p-d9cb76fa.entry.js → p-1d21e83d.entry.js} +1 -1
- package/dist/twilight/{p-518a0343.entry.js → p-20c2aebb.entry.js} +1 -1
- package/dist/twilight/{p-21fe599c.entry.js → p-2442ae2d.entry.js} +1 -1
- package/dist/twilight/{p-5d8a987d.entry.js → p-26cc4a6c.entry.js} +1 -1
- package/dist/twilight/{p-a7f2a74c.entry.js → p-2718fe0c.entry.js} +1 -1
- package/dist/twilight/{p-789b3fd9.entry.js → p-27ccf3c2.entry.js} +1 -1
- package/dist/twilight/{p-abc06135.entry.js → p-29bad38b.entry.js} +1 -1
- package/dist/twilight/{p-a877a3df.entry.js → p-2a2585f6.entry.js} +1 -1
- package/dist/twilight/{p-604317c4.entry.js → p-2f131202.entry.js} +1 -1
- package/dist/twilight/{p-2e16cb11.entry.js → p-3039ea2d.entry.js} +1 -1
- package/dist/twilight/{p-f624f871.entry.js → p-33314f4c.entry.js} +1 -1
- package/dist/twilight/{p-5fa56bf3.entry.js → p-34396806.entry.js} +1 -1
- package/dist/twilight/{p-4448d43a.entry.js → p-38656e34.entry.js} +1 -1
- package/dist/twilight/{p-c7dd7c0b.entry.js → p-39249883.entry.js} +1 -1
- package/dist/twilight/{p-fd208d08.entry.js → p-3cab158c.entry.js} +1 -1
- package/dist/twilight/{p-5e85ab72.entry.js → p-3d7a7be6.entry.js} +1 -1
- package/dist/twilight/{p-7a4c9484.entry.js → p-3d973988.entry.js} +1 -1
- package/dist/twilight/{p-3a18c5f0.entry.js → p-3e4915d1.entry.js} +1 -1
- package/dist/twilight/{p-RkvdV-0f.js → p-3fOwWicU.js} +1 -1
- package/dist/twilight/{p-61cac25a.entry.js → p-409967bd.entry.js} +1 -1
- package/dist/twilight/{p-1208db60.entry.js → p-4810a1b1.entry.js} +1 -1
- package/dist/twilight/{p-609e9adc.entry.js → p-48f7b6db.entry.js} +1 -1
- package/dist/twilight/{p-70bad7c7.entry.js → p-4dde6f7b.entry.js} +1 -1
- package/dist/twilight/{p-0d391a95.entry.js → p-51e42995.entry.js} +1 -1
- package/dist/twilight/{p-8dd123f2.entry.js → p-5261d916.entry.js} +1 -1
- package/dist/twilight/{p-a00bc904.entry.js → p-541f7f57.entry.js} +1 -1
- package/dist/twilight/{p-9fed2cae.entry.js → p-5bce4517.entry.js} +1 -1
- package/dist/twilight/{p-1cb73a8f.entry.js → p-5cbea591.entry.js} +1 -1
- package/dist/twilight/{p-950cd62e.entry.js → p-66d7dc4b.entry.js} +1 -1
- package/dist/twilight/{p-c88bacf7.entry.js → p-6a8c68d3.entry.js} +1 -1
- package/dist/twilight/{p-429fc3c7.entry.js → p-6d284b59.entry.js} +1 -1
- package/dist/twilight/{p-43a205c5.entry.js → p-6dc098ce.entry.js} +1 -1
- package/dist/twilight/{p-69df3f0f.entry.js → p-6feca279.entry.js} +1 -1
- package/dist/twilight/{p-af2f5e14.entry.js → p-70adb6de.entry.js} +1 -1
- package/dist/twilight/{p-dced08eb.entry.js → p-72aaf959.entry.js} +1 -1
- package/dist/twilight/{p-3c8e7fa5.entry.js → p-72b9eac4.entry.js} +1 -1
- package/dist/twilight/{p-9f8b8f9b.entry.js → p-72e4cb1c.entry.js} +1 -1
- package/dist/twilight/{p-4402fa6e.entry.js → p-74a27cf4.entry.js} +1 -1
- package/dist/twilight/{p-9d4f612c.entry.js → p-793f5e44.entry.js} +1 -1
- package/dist/twilight/{p-d5d143f8.entry.js → p-7b2aed14.entry.js} +1 -1
- package/dist/twilight/{p-249db53c.entry.js → p-80207cbe.entry.js} +1 -1
- package/dist/twilight/{p-77e452bb.entry.js → p-80d9f3f2.entry.js} +1 -1
- package/dist/twilight/{p-d5811dab.entry.js → p-82d622c6.entry.js} +1 -1
- package/dist/twilight/{p-5adb2573.entry.js → p-8308bef2.entry.js} +1 -1
- package/dist/twilight/{p-d243c5c6.entry.js → p-851d8872.entry.js} +1 -1
- package/dist/twilight/{p-ac4fffc8.entry.js → p-86f7baf1.entry.js} +1 -1
- package/dist/twilight/{p-59377e23.entry.js → p-88015898.entry.js} +1 -1
- package/dist/twilight/{p-9c2c481e.entry.js → p-8b646ef9.entry.js} +1 -1
- package/dist/twilight/{p-4bf27bdf.entry.js → p-8e5d089a.entry.js} +1 -1
- package/dist/twilight/{p-69850e8b.entry.js → p-8e9b1b2b.entry.js} +1 -1
- package/dist/twilight/{p-537127ba.entry.js → p-8f5159fa.entry.js} +1 -1
- package/dist/twilight/{p-629ce572.entry.js → p-911d2800.entry.js} +1 -1
- package/dist/twilight/{p-24c84285.entry.js → p-9d021d6e.entry.js} +1 -1
- package/dist/twilight/{p-d2698f9a.entry.js → p-9fb43cf0.entry.js} +1 -1
- package/dist/twilight/{p-ucgX82B7.js → p-B2IpqWj1.js} +1 -1
- package/dist/twilight/{p-COmDVrcC.js → p-BPbju0nD.js} +1 -1
- package/dist/twilight/{p-CnfHXyEu.js → p-BcTcBNfQ.js} +1 -1
- package/dist/twilight/p-CL7OPpYS.js +4 -0
- package/dist/twilight/{p-DjsKwETU.js → p-CPEhvySG.js} +1 -1
- package/dist/twilight/{p-M4ZqgDjz.js → p-CtvAJfAB.js} +1 -1
- package/dist/twilight/{p-DpTbeb50.js → p-DWPgHXOD.js} +1 -1
- package/dist/twilight/{p-b3EkK54S.js → p-Dd1m1dz2.js} +1 -1
- package/dist/twilight/{p-C4y1c3K3.js → p-DuCwWaQ_.js} +2 -2
- package/dist/twilight/{p-Bo_bRDhK.js → p-XUX4U548.js} +1 -1
- package/dist/twilight/{p-2edbc237.entry.js → p-a138bee9.entry.js} +1 -1
- package/dist/twilight/{p-4f78e05a.entry.js → p-a8ddd1bb.entry.js} +1 -1
- package/dist/twilight/{p-948fb25a.entry.js → p-a9a85cfe.entry.js} +1 -1
- package/dist/twilight/{p-6d6faf9e.entry.js → p-ac7bd839.entry.js} +1 -1
- package/dist/twilight/{p-7c286ef2.entry.js → p-ae695102.entry.js} +1 -1
- package/dist/twilight/{p-7272b850.entry.js → p-af7962e9.entry.js} +1 -1
- package/dist/twilight/{p-c7a42493.entry.js → p-b094fd03.entry.js} +1 -1
- package/dist/twilight/{p-2426ecc1.entry.js → p-b6fd1b52.entry.js} +1 -1
- package/dist/twilight/{p-yMm9FfsL.js → p-b7vjgdh1.js} +1 -1
- package/dist/twilight/p-bb05f144.entry.js +4 -0
- package/dist/twilight/{p-65c395b2.entry.js → p-c069565d.entry.js} +1 -1
- package/dist/twilight/{p-059447b5.entry.js → p-c1b27d26.entry.js} +1 -1
- package/dist/twilight/{p-6e88b2ee.entry.js → p-c8a60c05.entry.js} +1 -1
- package/dist/twilight/{p-a9259c2c.entry.js → p-caa2055b.entry.js} +1 -1
- package/dist/twilight/{p-ed7de02d.entry.js → p-cadedd90.entry.js} +1 -1
- package/dist/twilight/{p-1c0a22fc.entry.js → p-ccb12c91.entry.js} +1 -1
- package/dist/twilight/{p-d4338ca5.entry.js → p-d140a35a.entry.js} +1 -1
- package/dist/twilight/{p-4e82cbd2.entry.js → p-d263e364.entry.js} +1 -1
- package/dist/twilight/{p-bf15f029.entry.js → p-de78fa6c.entry.js} +1 -1
- package/dist/twilight/{p-a67f9586.entry.js → p-df2ac369.entry.js} +1 -1
- package/dist/twilight/{p-17682453.entry.js → p-e82fb471.entry.js} +1 -1
- package/dist/twilight/{p-036bacea.entry.js → p-ea20010a.entry.js} +1 -1
- package/dist/twilight/{p-e94e2b10.entry.js → p-eb3706da.entry.js} +1 -1
- package/dist/twilight/{p-ee32d269.entry.js → p-ec75d885.entry.js} +1 -1
- package/dist/twilight/{p-9029c370.entry.js → p-ee2fea82.entry.js} +1 -1
- package/dist/twilight/{p-85df37ed.entry.js → p-ee54773e.entry.js} +1 -1
- package/dist/twilight/{p-a882a9df.entry.js → p-f35812bf.entry.js} +1 -1
- package/dist/twilight/{p-4a367dba.entry.js → p-f5327d06.entry.js} +1 -1
- package/dist/twilight/{p-ae778949.entry.js → p-f5d273a4.entry.js} +1 -1
- package/dist/twilight/{p-818c83b3.entry.js → p-f83489a2.entry.js} +1 -1
- package/dist/twilight/{p-8e820727.entry.js → p-f98dd619.entry.js} +1 -1
- package/dist/twilight/{p-743c3869.entry.js → p-f99acb35.entry.js} +1 -1
- package/dist/twilight/{p-C3eic20c.js → p-zvJtEDoB.js} +1 -1
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/types/components/salla-social-share/salla-social-share.d.ts +1 -0
- package/dist/types/shared/catalog-recommendations.d.ts +12 -0
- package/package.json +5 -5
- package/dist/cjs/catalog-recommendations-B_DRy6NT.js +0 -91
- package/dist/esm/catalog-recommendations-CehbSKTM.js +0 -88
- package/dist/twilight/p-91969734.entry.js +0 -4
- package/dist/twilight/p-CehbSKTM.js +0 -4
|
@@ -13,62 +13,67 @@ function getRecommendationsBaseUrl() {
|
|
|
13
13
|
function getRecommendationsUrl(path) {
|
|
14
14
|
return `${getRecommendationsBaseUrl()}${RECOMMENDATIONS_BASE_PATH}${path}`;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
function getStoreOriginHostname() {
|
|
30
|
-
const trackUrl = salla.config.get('jitsu.track_url');
|
|
31
|
-
const trackHostname = trackUrl ? parseHostname(String(trackUrl)) : null;
|
|
32
|
-
if (trackHostname) {
|
|
33
|
-
return trackHostname;
|
|
34
|
-
}
|
|
35
|
-
for (const candidate of [salla.config.get('store.domain'), salla.config.get('store.url')]) {
|
|
36
|
-
const hostname = candidate ? parseHostname(String(candidate)) : null;
|
|
37
|
-
if (hostname && !hostname.includes('beta.salla.group')) {
|
|
38
|
-
return hostname;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return window.location.hostname;
|
|
42
|
-
}
|
|
43
|
-
function getRecommendationsRequestConfig(params) {
|
|
16
|
+
/**
|
|
17
|
+
* Minimal, CORS-allow-listed header set for the recommendations host.
|
|
18
|
+
*
|
|
19
|
+
* We deliberately do NOT go through `salla.api` here: axios injects default
|
|
20
|
+
* common headers (Authorization, UTM params, s-affiliate-code, allocation, …)
|
|
21
|
+
* that are not in the recommendations CORS allow-list and fail the preflight.
|
|
22
|
+
* Sending an explicit set via `fetch` avoids that whole class of failures.
|
|
23
|
+
* Store resolution uses the browser-set `Origin` header plus `s-store-id`.
|
|
24
|
+
*
|
|
25
|
+
* @internal exported for unit tests
|
|
26
|
+
*/
|
|
27
|
+
export function getRecommendationsHeaders() {
|
|
44
28
|
const headers = {
|
|
45
29
|
's-store-id': String(salla.config.get('store.id')),
|
|
46
|
-
origin: getStoreOriginHostname(),
|
|
47
30
|
's-source': 'store',
|
|
48
31
|
lang: salla.lang.getLocale(),
|
|
49
32
|
};
|
|
50
|
-
|
|
33
|
+
// Only `s-scope-id` is on the recommendations CORS allow-list — `s-scope-type`
|
|
34
|
+
// is NOT, and requesting it makes the browser reject the preflight.
|
|
35
|
+
const scopeId = salla.api.getHeader?.('s-scope-id');
|
|
51
36
|
if (scopeId) {
|
|
52
37
|
headers['s-scope-id'] = String(scopeId);
|
|
53
38
|
}
|
|
54
|
-
return
|
|
39
|
+
return headers;
|
|
55
40
|
}
|
|
56
41
|
function extractRecommendationIds(response) {
|
|
57
42
|
return (response?.data ?? [])
|
|
58
43
|
.map(item => item?.id)
|
|
59
44
|
.filter((id) => Boolean(id));
|
|
60
45
|
}
|
|
46
|
+
/** Salla product ids are always numeric; reject anything else before it reaches the URL. */
|
|
47
|
+
function toNumericId(value) {
|
|
48
|
+
const id = String(value);
|
|
49
|
+
return /^\d+$/.test(id) ? id : null;
|
|
50
|
+
}
|
|
61
51
|
function fetchRecommendations(path, params) {
|
|
62
|
-
const url = getRecommendationsUrl(path);
|
|
63
|
-
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
const url = new URL(getRecommendationsUrl(path));
|
|
53
|
+
Object.entries(params).forEach(([key, value]) => url.searchParams.set(key, value));
|
|
54
|
+
// Native fetch (not salla.api) so only the explicit allow-listed headers are
|
|
55
|
+
// sent — no axios default headers to trip the recommendations CORS preflight.
|
|
56
|
+
// Best-effort feature: callers hide their section via .catch(), so no notifier.
|
|
57
|
+
// The host is the hardcoded constant CATALOG_RECOMMENDATIONS_API and only
|
|
58
|
+
// validated numeric ids reach the query string, so there is no SSRF surface.
|
|
59
|
+
// nosemgrep
|
|
60
|
+
return fetch(url.toString(), {
|
|
61
|
+
method: 'GET',
|
|
62
|
+
headers: getRecommendationsHeaders(),
|
|
63
|
+
})
|
|
64
|
+
.then((response) => {
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
throw new Error(`Recommendations request failed: ${response.status}`);
|
|
67
|
+
}
|
|
68
|
+
return response.json();
|
|
69
|
+
})
|
|
70
|
+
.then((payload) => extractRecommendationIds(payload));
|
|
69
71
|
}
|
|
70
72
|
export function fetchCartBoughtTogether(productIds) {
|
|
71
|
-
const ids = productIds
|
|
73
|
+
const ids = productIds
|
|
74
|
+
.map(toNumericId)
|
|
75
|
+
.filter((id) => id !== null)
|
|
76
|
+
.slice(0, CART_BOUGHT_TOGETHER_MAX_PRODUCT_IDS);
|
|
72
77
|
if (!ids.length) {
|
|
73
78
|
return Promise.resolve([]);
|
|
74
79
|
}
|
|
@@ -77,10 +82,11 @@ export function fetchCartBoughtTogether(productIds) {
|
|
|
77
82
|
});
|
|
78
83
|
}
|
|
79
84
|
export function fetchProductCustomersAlsoBought(productId) {
|
|
80
|
-
|
|
85
|
+
const id = toNumericId(productId);
|
|
86
|
+
if (!id) {
|
|
81
87
|
return Promise.resolve([]);
|
|
82
88
|
}
|
|
83
89
|
return fetchRecommendations('/products/customers-also-bought', {
|
|
84
|
-
product_id:
|
|
90
|
+
product_id: id,
|
|
85
91
|
});
|
|
86
92
|
}
|
|
@@ -13,62 +13,67 @@ function getRecommendationsBaseUrl() {
|
|
|
13
13
|
function getRecommendationsUrl(path) {
|
|
14
14
|
return `${getRecommendationsBaseUrl()}${RECOMMENDATIONS_BASE_PATH}${path}`;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
function getStoreOriginHostname() {
|
|
30
|
-
const trackUrl = salla.config.get('jitsu.track_url');
|
|
31
|
-
const trackHostname = trackUrl ? parseHostname(String(trackUrl)) : null;
|
|
32
|
-
if (trackHostname) {
|
|
33
|
-
return trackHostname;
|
|
34
|
-
}
|
|
35
|
-
for (const candidate of [salla.config.get('store.domain'), salla.config.get('store.url')]) {
|
|
36
|
-
const hostname = candidate ? parseHostname(String(candidate)) : null;
|
|
37
|
-
if (hostname && !hostname.includes('beta.salla.group')) {
|
|
38
|
-
return hostname;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return window.location.hostname;
|
|
42
|
-
}
|
|
43
|
-
function getRecommendationsRequestConfig(params) {
|
|
16
|
+
/**
|
|
17
|
+
* Minimal, CORS-allow-listed header set for the recommendations host.
|
|
18
|
+
*
|
|
19
|
+
* We deliberately do NOT go through `salla.api` here: axios injects default
|
|
20
|
+
* common headers (Authorization, UTM params, s-affiliate-code, allocation, …)
|
|
21
|
+
* that are not in the recommendations CORS allow-list and fail the preflight.
|
|
22
|
+
* Sending an explicit set via `fetch` avoids that whole class of failures.
|
|
23
|
+
* Store resolution uses the browser-set `Origin` header plus `s-store-id`.
|
|
24
|
+
*
|
|
25
|
+
* @internal exported for unit tests
|
|
26
|
+
*/
|
|
27
|
+
function getRecommendationsHeaders() {
|
|
44
28
|
const headers = {
|
|
45
29
|
's-store-id': String(salla.config.get('store.id')),
|
|
46
|
-
origin: getStoreOriginHostname(),
|
|
47
30
|
's-source': 'store',
|
|
48
31
|
lang: salla.lang.getLocale(),
|
|
49
32
|
};
|
|
50
|
-
|
|
33
|
+
// Only `s-scope-id` is on the recommendations CORS allow-list — `s-scope-type`
|
|
34
|
+
// is NOT, and requesting it makes the browser reject the preflight.
|
|
35
|
+
const scopeId = salla.api.getHeader?.('s-scope-id');
|
|
51
36
|
if (scopeId) {
|
|
52
37
|
headers['s-scope-id'] = String(scopeId);
|
|
53
38
|
}
|
|
54
|
-
return
|
|
39
|
+
return headers;
|
|
55
40
|
}
|
|
56
41
|
function extractRecommendationIds(response) {
|
|
57
42
|
return (response?.data ?? [])
|
|
58
43
|
.map(item => item?.id)
|
|
59
44
|
.filter((id) => Boolean(id));
|
|
60
45
|
}
|
|
46
|
+
/** Salla product ids are always numeric; reject anything else before it reaches the URL. */
|
|
47
|
+
function toNumericId(value) {
|
|
48
|
+
const id = String(value);
|
|
49
|
+
return /^\d+$/.test(id) ? id : null;
|
|
50
|
+
}
|
|
61
51
|
function fetchRecommendations(path, params) {
|
|
62
|
-
const url = getRecommendationsUrl(path);
|
|
63
|
-
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
const url = new URL(getRecommendationsUrl(path));
|
|
53
|
+
Object.entries(params).forEach(([key, value]) => url.searchParams.set(key, value));
|
|
54
|
+
// Native fetch (not salla.api) so only the explicit allow-listed headers are
|
|
55
|
+
// sent — no axios default headers to trip the recommendations CORS preflight.
|
|
56
|
+
// Best-effort feature: callers hide their section via .catch(), so no notifier.
|
|
57
|
+
// The host is the hardcoded constant CATALOG_RECOMMENDATIONS_API and only
|
|
58
|
+
// validated numeric ids reach the query string, so there is no SSRF surface.
|
|
59
|
+
// nosemgrep
|
|
60
|
+
return fetch(url.toString(), {
|
|
61
|
+
method: 'GET',
|
|
62
|
+
headers: getRecommendationsHeaders(),
|
|
63
|
+
})
|
|
64
|
+
.then((response) => {
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
throw new Error(`Recommendations request failed: ${response.status}`);
|
|
67
|
+
}
|
|
68
|
+
return response.json();
|
|
69
|
+
})
|
|
70
|
+
.then((payload) => extractRecommendationIds(payload));
|
|
69
71
|
}
|
|
70
72
|
function fetchCartBoughtTogether(productIds) {
|
|
71
|
-
const ids = productIds
|
|
73
|
+
const ids = productIds
|
|
74
|
+
.map(toNumericId)
|
|
75
|
+
.filter((id) => id !== null)
|
|
76
|
+
.slice(0, CART_BOUGHT_TOGETHER_MAX_PRODUCT_IDS);
|
|
72
77
|
if (!ids.length) {
|
|
73
78
|
return Promise.resolve([]);
|
|
74
79
|
}
|
|
@@ -77,11 +82,12 @@ function fetchCartBoughtTogether(productIds) {
|
|
|
77
82
|
});
|
|
78
83
|
}
|
|
79
84
|
function fetchProductCustomersAlsoBought(productId) {
|
|
80
|
-
|
|
85
|
+
const id = toNumericId(productId);
|
|
86
|
+
if (!id) {
|
|
81
87
|
return Promise.resolve([]);
|
|
82
88
|
}
|
|
83
89
|
return fetchRecommendations('/products/customers-also-bought', {
|
|
84
|
-
product_id:
|
|
90
|
+
product_id: id,
|
|
85
91
|
});
|
|
86
92
|
}
|
|
87
93
|
|